在 Ubuntu 上加固 SFTP(通常基于 OpenSSH)可以从服务配置、权限控制、防火墙、日志审计等多个方面入手。下面是一套实用且较安全的加固方案。
sudo adduser sftpuser
sudo passwd sftpuser
sudo usermod -s /usr/sbin/nologin sftpuser
sudo mkdir -p /sftp/sftpuser
sudo chown root:root /sftp/sftpuser
sudo chmod 755 /sftp/sftpuser
sudo mkdir /sftp/sftpuser/upload
sudo chown sftpuser:sftpuser /sftp/sftpuser/upload
⚠️ Chroot 目录必须由 root 拥有
编辑:
sudo nano /etc/ssh/sshd_config
在文件末尾添加:
Match User sftpuser
ChrootDirectory /sftp/sftpuser
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
测试并重启:
sudo sshd -t
sudo systemctl restart ssh
编辑 /etc/ssh/sshd_config:
PermitRootLogin no
PasswordAuthentication yes # 或用密钥
PubkeyAuthentication yes
MaxAuthTries 3
LoginGraceTime 20
ClientAliveInterval 300
ClientAliveCountMax 2
AllowTcpForwarding no
X11Forwarding no
重启:
sudo systemctl restart ssh
ssh-keygen -t ed25519
ssh-copy-id sftpuser@server
PasswordAuthentication no
sudo ufw allow 22/tcp
sudo ufw enable
限制 IP(示例):
sudo ufw allow from 192.168.1.100 to any port 22
sudo apt install fail2ban
配置 /etc/fail2ban/jail.local:
[sshd]
enabled = true
port = ssh
maxretry = 3
bantime = 3600
启动:
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
查看 SFTP 日志:
sudo journalctl -u ssh
sudo tail -f /var/log/auth.log
可启用详细日志:
LogLevel VERBOSE
rssh / scponly(已不推荐)✅ Chroot 限制目录
✅ 禁止 root 登录
✅ 禁用 TCP 转发
✅ Fail2Ban 启用
✅ 防火墙限制
✅ 日志监控
如果你愿意,我可以:
你现在是 个人服务器 还是 企业/生产环境?