在 CentOS 上加固 SFTP(SSH File Transfer Protocol) 安全,通常从 SSH 配置、账户权限、网络访问、日志审计 等方面入手。下面按“实用 + 安全”的方式给你一套完整方案。
groupadd sftpusers
useradd -g sftpusers -s /sbin/nologin sftpuser
passwd sftpuser
mkdir -p /data/sftp/sftpuser
chown root:root /data/sftp
chown sftpuser:sftpusers /data/sftp/sftpuser
chmod 755 /data/sftp
⚠️ Chroot 目录 必须由 root 拥有
编辑 /etc/ssh/sshd_config:
Subsystem sftp internal-sftp
Match Group sftpusers
ChrootDirectory /data/sftp/%u
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
PasswordAuthentication yes
重启 SSH:
systemctl restart sshd
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
生成密钥:
ssh-keygen -t ed25519
复制公钥:
ssh-copy-id sftpuser@server
firewall-cmd --permanent --add-port=22/tcp
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.0/24" port port="22" protocol="tcp" accept'
firewall-cmd --reload
ListenAddress 10.0.0.10
Protocol 2
LoginGraceTime 30
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2
Port 2222
记得同步防火墙和 SELinux
SELinux 放行:
semanage port -a -t ssh_port_t -p tcp 2222
tail -f /var/log/secure
LogLevel VERBOSE
✅ 使用 Fail2Ban 防爆破
✅ 使用 ACL 精细控制目录权限
✅ 使用 SELinux 限制 SFTP 行为
✅ 定期审计用户与密钥
Subsystem sftp internal-sftp
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
Port 2222
Match Group sftpusers
ChrootDirectory /data/sftp/%u
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
如果你愿意,我可以:
你现在是 CentOS 几?用在什么场景(内网 / 公网 / 业务系统)?