1. 创建专用SFTP用户及组
为隔离普通用户与SFTP用户权限,需创建专用用户组(如sftpusers
)及用户,并禁止其登录shell。例如:
sudo groupadd sftpusers # 创建组
sudo useradd -m -g sftpusers -s /bin/false sftpuser # 创建用户(-s /bin/false禁止shell登录)
sudo passwd sftpuser # 设置强密码
此步骤可防止用户通过SSH登录系统,仅允许SFTP传输。
2. 配置SSH限制SFTP访问
编辑/etc/ssh/sshd_config
文件,通过Match
指令针对SFTP用户组设置严格规则:
Match Group sftpusers
ChrootDirectory %h # 将用户限制在其家目录(Chroot Jail)
ForceCommand internal-sftp # 强制使用SFTP,禁用SSH shell
AllowTcpForwarding no # 禁用TCP转发(防止端口转发攻击)
X11Forwarding no # 禁用X11转发(防止图形界面攻击)
修改后重启SSH服务生效:sudo systemctl restart sshd
。
此配置是SFTP安全的核心,通过Chroot
隔离用户访问范围,ForceCommand
彻底禁用非SFTP功能。
3. 设置严格的目录权限
root
所有,权限设为755
(用户可读写执行,组及其他用户仅读执行),防止用户修改目录结构:sudo chown root:root /home/sftpuser
sudo chmod 755 /home/sftpuser
uploads
),归用户所有,权限设为755
(或750
,限制组外用户访问):sudo mkdir /home/sftpuser/uploads
sudo chown sftpuser:sftpusers /home/sftpuser/uploads
sudo chmod 755 /home/sftpuser/uploads # 或750,根据需求调整
注意:ChrootDirectory
的父目录(如/home/sftpuser
)不能由用户拥有,否则会导致Chroot
失效。4. 启用公钥认证(禁用密码认证)
密码认证易受暴力破解,建议使用公钥认证提升安全性:
ssh-keygen -t rsa -b 4096
(默认保存在~/.ssh/id_rsa
)。cat ~/.ssh/id_rsa.pub | sudo tee -a /home/sftpuser/.ssh/authorized_keys
。sudo chown -R sftpuser:sftpusers /home/sftpuser/.ssh
、sudo chmod 700 /home/sftpuser/.ssh
、sudo chmod 600 /home/sftpuser/.ssh/authorized_keys
。PasswordAuthentication no
。5. 配置防火墙限制访问IP
使用ufw
(Uncomplicated Firewall)仅允许可信IP访问SFTP端口(默认22):
sudo ufw allow from <trusted_ip> to any port 22 # 替换<trusted_ip>为可信IP
sudo ufw enable # 启用防火墙
若需允许整个网段,可将<trusted_ip>
替换为网段地址(如192.168.1.0/24
)。此措施可减少非法IP的连接尝试。
6. 安装并配置Fail2ban防暴力破解
Fail2ban可自动检测多次登录失败的IP并封禁:
sudo apt install fail2ban
。sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
[sshd]
部分:[sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 5 # 5次失败后封禁
bantime = 3600 # 封禁1小时(单位:秒)
sudo systemctl restart fail2ban
。7. 日志监控与审计
开启SSH详细日志,定期检查用户活动:
LogLevel VERBOSE
(记录详细登录信息,如IP、时间、操作)。sudo tail -f /var/log/auth.log
(实时监控)或sudo grep 'sftp' /var/log/auth.log
(过滤SFTP日志)。8. 可选:使用SELinux或AppArmor增强隔离
sudo setsebool -P sftp_home_dir on # 允许SFTP访问用户家目录
sudo chcon -Rt svirt_sandbox_file_t /home/sftpuser # 设置正确的安全上下文
/etc/apparmor.d/usr.sbin.sshd
,添加规则限制SFTP用户的文件访问路径(如仅允许/home/sftpuser/**
)。