加固 Ubuntu 上的 SFTP 安全,可以从 SSH 配置、权限控制、用户隔离、密钥认证、防火墙与审计 等多个层面进行。下面是一套实用、可落地的加固方案,适合生产环境。
sudo groupadd sftpusers
sudo useradd -m -g sftpusers -s /usr/sbin/nologin sftpuser
sudo passwd sftpuser
/usr/sbin/nologin禁止用户登录系统 Shell
编辑:
sudo nano /etc/ssh/sshd_config
在文件末尾添加:
Match Group sftpusers
ChrootDirectory /sftp/%u
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
⚠️ Chroot 目录必须归 root 所有,且其他用户不可写
sudo mkdir -p /sftp/sftpuser/upload
sudo chown root:root /sftp/sftpuser
sudo chmod 755 /sftp/sftpuser
sudo chown sftpuser:sftpusers /sftp/sftpuser/upload
目录结构示例:
/sftp/sftpuser/ ← root 所有(不能写)
/sftp/sftpuser/upload ← 用户可写
PermitRootLogin no
PasswordAuthentication no # 推荐用密钥
PubkeyAuthentication yes
UseDNS no
MaxAuthTries 3
客户端:
ssh-keygen -t ed25519
mkdir -p ~/.ssh
chmod 700 ~/.ssh
nano ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
KexAlgorithms curve25519-sha256,diffie-hellman-group16-sha512
Ciphers aes256-gcm@openssh.com,chacha20-poly1305@openssh.com
MACs hmac-sha2-256-etm@openssh.com
Port 2222
sudo ufw allow 2222/tcp
sudo ufw enable
sudo apt install fail2ban
配置示例:
[sshd]
enabled = true
maxretry = 3
bantime = 3600
PermitEmptyPasswords no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no
sudo tail -f /var/log/auth.log
LogLevel VERBOSE
✅ 不要安装 vsftpd(除非必须)
✅ SFTP ≠ FTPS(SFTP 是 SSH 自带,更安全)
✅ 定期更新系统:
sudo apt update && sudo apt upgrade
| 项目 | 是否 |
|---|---|
| 禁用 root 登录 | ✅ |
| 禁用密码登录 | ✅ |
| 使用密钥认证 | ✅ |
| Chroot 目录隔离 | ✅ |
| 用户无 shell | ✅ |
| fail2ban 启用 | ✅ |
| 防火墙限制端口 | ✅ |
如果你愿意,我可以:
只要告诉我你的 Ubuntu 版本和使用场景即可。