CentOS SFTP安全漏洞如何防范
小樊
44
2025-11-29 19:56:33
CentOS SFTP 安全漏洞防范清单
一 加固基础配置
- 禁用 root 登录:在 /etc/ssh/sshd_config 设置 PermitRootLogin no,重启 sshd。
- 使用 SSH 密钥替代密码:客户端生成 4096 位 RSA 密钥,将公钥写入用户 ~/.ssh/authorized_keys,并设置权限 700/600;服务端禁用密码认证 PasswordAuthentication no、启用 PubkeyAuthentication yes。
- 仅启用内部 SFTP:注释或移除外部子系统,使用 Subsystem sftp internal-sftp。
- 限制危险功能:在 Match Group sftpusers 中设置 ForceCommand internal-sftp、AllowTcpForwarding no、X11Forwarding no。
- 目录与所有权:Chroot 根目录(如 %h 或 /sftp/%u)必须由 root:root 拥有且权限 755;可写目录在子目录中单独授权给相应用户。
- 防火墙:仅放行 22/TCP,如条件允许仅允许受信 IP 段访问。
- 日志与监控:设置 LogLevel VERBOSE,持续审计 /var/log/secure。
- 定期更新:执行 yum update openssh-server 保持修复最新漏洞。
二 用户与权限隔离
- 创建专用组与用户:
- groupadd sftpusers
- useradd -m -g sftpusers -s /sbin/nologin sftpuser(或 -s /bin/false)
- 目录结构示例:
- /sftp/sftpuser(root:root,755)
- /sftp/sftpuser/upload(sftpuser:sftpusers,755/775 视业务而定)
- Chroot 与权限要点:Chroot 目录及上级必须为 root 所有;如需上传,给对应用户在子目录授予写权限,避免对 Chroot 根目录可写。
- 公钥分发与权限:
- mkdir -p ~sftpuser/.ssh && chmod 700 ~sftpuser/.ssh
- echo “<公钥>” > ~sftpuser/.ssh/authorized_keys && chmod 600 ~sftpuser/.ssh/authorized_keys
- chown -R sftpuser:sftpusers ~sftpuser/.ssh
- 可选:为 SFTP 用户设置 umask 002/022,统一新建文件权限。
三 网络与登录防护
- 限制来源 IP:
- firewalld:firewall-cmd --permanent --zone=public --add-rich-rule=‘rule family=“ipv4” source address=“<TRUSTED_IP>/32” port port=“22” protocol=“tcp” accept’ && firewall-cmd --reload
- 或仅放行白名单段,其余默认拒绝。
- 防暴力破解:部署 Fail2ban,启用 [sshd] jail,maxretry=5、bantime=3600,日志路径 /var/log/secure。
- 端口与协议:尽量保持 22/TCP 不变更;如需端口迁移,同步更新防火墙与客户端配置,并谨慎评估现有自动化流程的兼容性。
- 连接测试:
- sftp sftpuser@<server_ip>
- 验证仅密钥可登录、失败登录被封禁、日志有对应记录。
四 已知漏洞处置要点
- CVE-2020-15778(scp 命令注入):
- 修复:升级到 OpenSSH ≥ 8.4;如无法升级,建议禁用 scp(如重命名 /usr/bin/scp 为不可用或卸载 openssh-clients,注意对运维流程影响)。
- 说明:该问题影响 scp,不直接等同于 SFTP 子系统漏洞,但常见运维替代关系使风险外溢。
- 低版本 OpenSSH 历史漏洞:如扫描报出历史 SFTP/SSH 漏洞,建议升级至包含修复的版本(如 8.5p1 起修复若干问题);离线环境升级前准备 telnet 等应急通道,升级后及时关闭。
五 快速配置示例
- 服务端 /etc/ssh/sshd_config 片段:
- PermitRootLogin no
- PasswordAuthentication no;PubkeyAuthentication yes
- Subsystem sftp internal-sftp
- Match Group sftpusers
- ChrootDirectory %h
- ForceCommand internal-sftp
- AllowTcpForwarding no;X11Forwarding no
- 目录与权限:
- chown root:root /sftp/sftpuser && chmod 755 /sftp/sftpuser
- chown sftpuser:sftpusers /sftp/sftpuser/upload
- 生效与验证:
- systemctl restart sshd
- tail -f /var/log/secure;sftp sftpuser@ 测试上传/下载与权限边界。