SFTP(SSH File Transfer Protocol)是一种基于SSH加密通道的安全文件传输协议。为确保其安全性,需从服务器配置、认证方式、网络防护等多方面进行加固。以下是详细的SFTP安全设置方案:
使用最新版OpenSSH
sudo apt update && sudo apt upgrade openssh-server # Debian/Ubuntu
sudo yum update openssh-server # RHEL/CentOS
限制SSH协议版本
# 修改/etc/ssh/sshd_config
Protocol 2 # 禁用旧版SSHv1
禁用root登录
PermitRootLogin no
限制SFTP用户目录(Chroot Jail)
Subsystem sftp internal-sftp
Match Group sftpusers
ChrootDirectory /home/%u
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
禁用密码认证(强制密钥对)
PasswordAuthentication no
PubkeyAuthentication yes
密钥管理建议
bash
ssh-keygen -t ed25519 -a 100
~/.ssh/authorized_keys
时添加限制:
bash
restrict,command="internal-sftp" ssh-ed25519 AAAAB3Nz... user@client
双因素认证(可选)
修改默认端口
Port 2222 # 避免22端口扫描
防火墙规则
sudo ufw allow 2222/tcp # Ubuntu
sudo firewall-cmd --add-port=2222/tcp --permanent # CentOS
IP白名单
AllowUsers user1@192.168.1.* user2@203.0.113.5
Fail2Ban防护
# 监控SSH/SFTP登录尝试
sudo apt install fail2ban
Chroot目录权限
sudo chown root:root /home/sftpuser
sudo chmod 755 /home/sftpuser
用户目录隔离
sudo mkdir /home/sftpuser/upload
sudo chown sftpuser:sftpuser /home/sftpuser/upload
增强日志记录
LogLevel VERBOSE
实时监控命令
sudo journalctl -u sshd -f # Systemd系统
sudo tail -f /var/log/auth.log # Debian系
证书认证(CA)
TrustedUserCAKeys
实现集中式用户证书管理。端口敲门(Port Knocking)
SSH证书过期
# 在authorized_keys中设置有效期
expires="20241231" ssh-ed25519 AAAAB3Nz...
客户端配置
# ~/.ssh/config
Host sftp-server
HostName 192.168.1.100
Port 2222
User sftpuser
IdentityFile ~/.ssh/sftp_ed25519
ServerAliveInterval 300
传输验证
bash
ssh-keyscan -p 2222 192.168.1.100 >> ~/.ssh/known_hosts
bash
sudo last -i | grep sshd
通过以上措施,可显著提升SFTP服务的安全性。建议根据实际环境进行测试后再部署到生产环境,并配合定期安全审计(如lynis audit system
)查漏补缺。对于高敏感场景,可考虑使用VPN+SFTP的多层防护架构。