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),避免配置丢失或误修改。