在 CentOS 上提升 SFTP(SSH File Transfer Protocol)安全性,可以从 SSH 配置、用户权限、防火墙、审计与防护 等多个方面入手。下面给你一套生产环境常用、可落地的加固方案。
避免普通用户拥有 SSH Shell 权限。
groupadd sftpusers
useradd -m -g sftpusers -s /sbin/nologin sftpuser
passwd sftpuser
编辑 SSH 配置:
vim /etc/ssh/sshd_config
在文件末尾添加:
Match Group sftpusers
ChrootDirectory /data/sftp/%u
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
mkdir -p /data/sftp/sftpuser
chown root:root /data/sftp/sftpuser
chmod 755 /data/sftp/sftpuser
mkdir /data/sftp/sftpuser/upload
chown sftpuser:sftpusers /data/sftp/sftpuser/upload
✅ Chroot 目录必须归 root 所有,且不可写
PermitRootLogin no
PasswordAuthentication no
✅ 使用 SSH Key 登录
Port 2222
⚠️ 记得同步防火墙规则
AllowUsers sftpuser
# 或
AllowGroups sftpusers
ssh-keygen -t ed25519 -C "sftpuser"
mkdir /home/sftpuser/.ssh
cat id_ed25519.pub >> /home/sftpuser/.ssh/authorized_keys
chmod 600 /home/sftpuser/.ssh/authorized_keys
chown -R sftpuser:sftpusers /home/sftpuser/.ssh
firewall-cmd --permanent --add-port=2222/tcp
firewall-cmd --reload
firewall-cmd --permanent \
--add-rich-rule='rule family="ipv4" source address="1.2.3.4" port port="2222" protocol="tcp" accept'
firewall-cmd --reload
yum install -y epel-release
yum install -y fail2ban
systemctl enable --now fail2ban
示例配置:
[sshd]
enabled = true
port = 2222
maxretry = 3
bantime = 3600
Subsystem sftp internal-sftp -l INFO
查看日志:
journalctl -u sshd
/var/log/secure
✅ 正确配置 ChrootDirectory 即可
chmod 555 /data/sftp/sftpuser
chmod 755 /data/sftp/sftpuser/upload
| 项目 | 建议 |
|---|---|
| 是否禁止 root 登录 | ✅ |
| 是否使用密钥认证 | ✅ |
| 是否限制 SFTP 用户 Shell | ✅ |
| 是否启用 Chroot | ✅ |
| 是否限制 IP | ✅ |
| 是否启用 fail2ban | ✅ |
| 场景 | 建议 |
|---|---|
| 公网 SFTP | 密钥 + Chroot + fail2ban + 非 22 端口 |
| 内网 SFTP | Chroot + 用户隔离 |
| 高安全 | + IP 白名单 + 审计日志 |
如果你愿意,我可以:
只要告诉我你的 CentOS 版本和使用场景 即可。