CentOS上SFTP安全策略制定指南
确保系统安装OpenSSH服务器(SFTP依赖组件),若未安装可通过sudo yum install openssh-server
完成安装。编辑SSH主配置文件/etc/ssh/sshd_config
,进行以下核心修改:
PermitRootLogin no
,避免root账户通过SFTP暴露系统核心权限;PasswordAuthentication no
,强制使用SSH密钥对登录,降低密码泄露风险;Subsystem sftp internal-sftp
,替代传统sftp-server(更轻量且安全);Match Group sftpusers
(或Match User username
针对单个用户)指令,将指定用户/组限制在chroot环境中,配置ChrootDirectory %h
(用户主目录作为根目录)、ForceCommand internal-sftp
(强制使用SFTP,禁止SSH shell访问)、AllowTcpForwarding no
(禁用端口转发)、X11Forwarding no
(禁用X11图形转发)。修改完成后重启SSH服务:sudo systemctl restart sshd
。创建专用SFTP用户组(如sftpusers
),并将SFTP用户添加至该组,实现集中权限管理:
sudo groupadd sftpusers # 创建组 sudo useradd -m -G sftpusers -s /sbin/nologin sftpuser # 创建用户(-s指定无登录shell,防止SSH shell访问) sudo passwd sftpuser # 设置强密码(包含大小写字母、数字、特殊字符,长度≥10位)
关键说明:SFTP用户不应拥有系统shell访问权限(如/sbin/nologin
),避免通过SSH登录系统。
Chroot环境需严格限制用户访问范围,确保其无法突破根目录限制:
root
,组设为sftpusers
,权限设为755
(root可读写执行,用户仅能读和执行):sudo chown root:root /home/sftpuser sudo chmod 755 /home/sftpuser
uploads
),所有者设为用户自身,组设为sftpusers
,权限设为755
(用户可读写执行,组可读执行):sudo mkdir -p /home/sftpuser/uploads sudo chown sftpuser:sftpusers /home/sftpuser/uploads sudo chmod 755 /home/sftpuser/uploads
注意:Chroot目录(用户主目录)必须由root
拥有,否则SSH会拒绝chroot操作;上传目录需赋予用户写权限,确保其能上传文件。
禁用密码认证后,需配置SSH密钥对以实现安全登录:
ssh-keygen -t rsa -b 4096
(生成4096位RSA密钥),默认保存至~/.ssh/id_rsa
(私钥)和~/.ssh/id_rsa.pub
(公钥);ssh-copy-id sftpuser@your_server_ip
命令,将公钥自动复制至服务器用户主目录的.ssh/authorized_keys
文件中;.ssh
目录权限为700
(仅所有者可读写执行),authorized_keys
文件权限为600
(仅所有者可读写):sudo mkdir -p /home/sftpuser/.ssh sudo chmod 700 /home/sftpuser/.ssh sudo chown sftpuser:sftpusers /home/sftpuser/.ssh sudo chmod 600 /home/sftpuser/.ssh/authorized_keys sudo chown sftpuser:sftpusers /home/sftpuser/.ssh/authorized_keys
优势:密钥认证比密码认证更安全,能有效防止暴力破解。
若系统启用SELinux(默认开启),需调整策略以允许SFTP正常运行:
sudo setsebool -P ssh_chroot_rw_homedirs on
,开启SSH chroot目录的读写权限;/home/sftpuser/uploads
),需使用semanage
和restorecon
命令调整上下文:sudo semanage fcontext -a -t ssh_home_t "/home/sftpuser/uploads(/.*)?" sudo restorecon -Rv /home/sftpuser/uploads
说明:SELinux的ssh_home_t
上下文允许SFTP用户在chroot环境中访问其主目录及子目录。
通过防火墙限制SFTP访问,仅允许可信IP地址连接:
sudo firewall-cmd --permanent --add-service=ssh
(永久添加SSH服务),然后sudo firewall-cmd --reload
(重新加载防火墙);--add-rich-rule
指令,例如仅允许可信IP(如192.168.1.100
)访问:sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" service name="ssh" accept' sudo firewall-cmd --reload
注意:默认SSH端口为22,若修改了端口,需将上述命令中的ssh
替换为自定义端口。
启用SSH/SFTP日志记录,定期审计用户活动:
/etc/ssh/sshd_config
,设置LogLevel VERBOSE
(详细日志,记录用户操作、认证信息等);/var/log/secure
(CentOS 7)或/var/log/auth.log
(CentOS 8/Stream),可通过tail -f /var/log/secure
实时监控,或使用grep
命令筛选SFTP相关日志(如grep "sftp" /var/log/secure
)。保持系统与软件包最新,修复已知安全漏洞:
sudo yum update -y
,更新操作系统及OpenSSH服务器至最新版本;/var/log/secure
日志,关注异常登录尝试(如多次失败登录)、未授权访问等;/etc/ssh/sshd_config
文件(如cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
),避免配置丢失或误修改。