温馨提示×

CentOS上SFTP的安全策略如何制定

小樊
43
2025-10-05 00:49:52
栏目: 智能运维

CentOS上SFTP安全策略制定指南

1. 安装与基础配置

确保系统安装OpenSSH服务器(SFTP依赖组件),若未安装可通过sudo yum install openssh-server完成安装。编辑SSH主配置文件/etc/ssh/sshd_config,进行以下核心修改:

  • 禁用root登录:设置PermitRootLogin no,避免root账户通过SFTP暴露系统核心权限;
  • 禁用密码认证(推荐密钥认证):设置PasswordAuthentication no,强制使用SSH密钥对登录,降低密码泄露风险;
  • 启用内部SFTP子系统:添加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

2. 用户与组管理

创建专用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登录系统。

3. Chroot目录权限设置

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操作;上传目录需赋予用户写权限,确保其能上传文件。

4. 密钥认证配置

禁用密码认证后,需配置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 

优势:密钥认证比密码认证更安全,能有效防止暴力破解。

5. SELinux配置(若启用)

若系统启用SELinux(默认开启),需调整策略以允许SFTP正常运行:

  • 允许chroot环境读写:执行sudo setsebool -P ssh_chroot_rw_homedirs on,开启SSH chroot目录的读写权限;
  • 调整目录安全上下文:若用户上传目录不在默认路径(如/home/sftpuser/uploads),需使用semanagerestorecon命令调整上下文:
    sudo semanage fcontext -a -t ssh_home_t "/home/sftpuser/uploads(/.*)?" sudo restorecon -Rv /home/sftpuser/uploads 

说明:SELinux的ssh_home_t上下文允许SFTP用户在chroot环境中访问其主目录及子目录。

6. 防火墙配置

通过防火墙限制SFTP访问,仅允许可信IP地址连接:

  • 允许SSH服务:若使用firewalld,执行sudo firewall-cmd --permanent --add-service=ssh(永久添加SSH服务),然后sudo firewall-cmd --reload(重新加载防火墙);
  • 限制IP访问:若需进一步限制,可使用--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替换为自定义端口。

7. 日志与监控

启用SSH/SFTP日志记录,定期审计用户活动:

  • 配置日志级别:编辑/etc/ssh/sshd_config,设置LogLevel VERBOSE(详细日志,记录用户操作、认证信息等);
  • 查看日志:SFTP日志默认保存至/var/log/secure(CentOS 7)或/var/log/auth.log(CentOS 8/Stream),可通过tail -f /var/log/secure实时监控,或使用grep命令筛选SFTP相关日志(如grep "sftp" /var/log/secure)。
    作用:日志能帮助快速定位异常活动(如暴力破解、未授权访问),及时采取措施。

8. 定期维护

保持系统与软件包最新,修复已知安全漏洞:

  • 更新系统:定期执行sudo yum update -y,更新操作系统及OpenSSH服务器至最新版本;
  • 检查日志:每周至少检查一次/var/log/secure日志,关注异常登录尝试(如多次失败登录)、未授权访问等;
  • 备份配置:定期备份/etc/ssh/sshd_config文件(如cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak),避免配置丢失或误修改。

0