CentOS SFTP 安全配置指南
一 基础安全基线
- 保持系统更新:执行 sudo yum update -y,及时修补漏洞。
- 安装并启用 OpenSSH 服务:执行 sudo yum install -y openssh-server && sudo systemctl enable --now sshd。
- 禁止 root 直接登录:在 /etc/ssh/sshd_config 中设置 PermitRootLogin no。
- 使用密钥认证优先:设置 PasswordAuthentication no,并为账户部署公钥(置于 ~/.ssh/authorized_keys,权限 600,目录 700)。
- 仅启用内部 SFTP 子系统:设置 Subsystem sftp internal-sftp,便于 chroot 与权限控制。
- 禁用不必要功能:在全局或针对 SFTP 用户的 Match 块中关闭 AllowTcpForwarding no、X11Forwarding no。
- 防火墙放行 SSH:使用 firewall-cmd --permanent --add-service=ssh && firewall-cmd --reload。
- 日志与审计:保留并定期查看 /var/log/secure,监控失败登录与异常行为。
二 用户与目录权限
- 创建专用用户与组:
- 组:sudo groupadd sftpusers
- 用户:sudo useradd -m -G sftpusers sftpuser && sudo passwd sftpuser
- 正确设置 chroot 根目录权限:
- chroot 目标(如 /home/sftpuser)及其所有上级目录必须属主为 root:root,权限 755,否则 internal-sftp 会拒绝登录。
- 为用户提供可写目录:
- 例如:mkdir -p /home/sftpuser/upload && chown sftpuser:sftpusers /home/sftpuser/upload && chmod 755 /home/sftpuser/upload。
- 仅 SFTP 的受限 Shell(可选):创建用户时可使用 -s /sbin/nologin,进一步降低交互式登录风险。
三 加固后的 sshd_config 示例
# 全局基线
Port 22
PermitRootLogin no
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM yes
X11Forwarding no
AllowTcpForwarding no
Subsystem sftp internal-sftp
# 仅允许 sftpusers 组使用 SFTP 并 chroot 到其家目录
Match Group sftpusers
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
- 修改后执行:sudo systemctl restart sshd 并测试连接。
- 如需自定义端口(例如 2222),在全局 Port 增加或替换端口,并在防火墙放行对应端口。
四 网络与访问控制
- 防火墙放行:
- 默认端口:firewall-cmd --permanent --add-service=ssh && firewall-cmd --reload
- 自定义端口:firewall-cmd --permanent --add-port=2222/tcp && firewall-cmd --reload
- 限制来源 IP(两种做法,择一或并用):
- 防火墙层面:
- 放通白名单到 trusted 区域:firewall-cmd --permanent --zone=trusted --add-source=1.2.3.4
- 仅 trusted 区域放行 SSH:firewall-cmd --permanent --zone=trusted --add-service=ssh
- 重载:firewall-cmd --reload
- SSH 层面(Match Address):
- 在 /etc/ssh/sshd_config 的 Match 块中加入 Match Address 1.2.3.4,5.6.7.8 以限制仅这些来源可用 SFTP。
五 运维与故障排查
- 连接与权限验证:
- 连接测试:sftp sftpuser@your_server_ip(或 -P 2222 指定端口)。
- 常见登录失败原因:chroot 目录或其上级目录属主非 root、权限非 755、用户家目录未对 SFTP 用户可写(应在 chroot 下单独建可写子目录)。
- SELinux 场景:
- 不建议直接关闭 SELinux。若遇到权限问题,优先使用 restorecon 恢复默认上下文,或按需调整布尔值与策略;确需临时排障可 setenforce 0,验证后恢复 setenforce 1。
- 日志与监控:
- 实时查看:sudo tail -f /var/log/secure;对失败登录、异常 IP、非法命令进行告警与封禁。