1. 安装与配置OpenSSH服务器
首先确保系统安装了OpenSSH服务器(Ubuntu默认包含),若未安装可通过sudo apt update && sudo apt install openssh-server安装。安装完成后启动服务并设置开机自启:sudo systemctl enable ssh --now。
2. 创建专用SFTP用户与组
为隔离权限,创建专用SFTP用户组(如sftp_users)及用户(如sftpuser),并禁止其通过SSH登录:
sudo groupadd sftp_users
sudo useradd -m -G sftp_users -s /usr/sbin/nologin sftpuser # -s禁止Shell登录
sudo passwd sftpuser # 设置强密码(至少8位,含大小写、数字、符号)
此步骤确保用户仅能通过SFTP访问,无法获得Shell权限。
3. 配置SSH限制SFTP访问
编辑/etc/ssh/sshd_config文件,添加以下内容以限制sftp_users组的行为:
# 注释原SFTP子系统(若有),替换为internal-sftp(更安全)
#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp
# 匹配sftp_users组,限制其权限
Match Group sftp_users
ChrootDirectory %h # 将用户限制在其主目录(chroot环境)
ForceCommand internal-sftp # 强制使用SFTP,忽略用户自定义命令
AllowTcpForwarding no # 禁止TCP转发(防止端口转发攻击)
X11Forwarding no # 禁止X11图形界面转发
修改后重启SSH服务使配置生效:sudo systemctl restart ssh。
4. 设置严格的目录权限
Chroot环境要求用户主目录必须由root拥有,且权限为755(防止用户修改目录结构):
sudo chown root:root /home/sftpuser
sudo chmod 755 /home/sftpuser
为用户创建专用上传目录(如uploads),并设置适当权限(用户可读写,组可读):
sudo mkdir /home/sftpuser/uploads
sudo chown sftpuser:sftp_users /home/sftpuser/uploads
sudo chmod 755 /home/sftpuser/uploads # 或770(若需组内共享)
此配置确保用户只能在uploads目录内上传/下载文件,无法访问主目录外的内容。
5. 启用公钥认证(禁用密码认证)
公钥认证比密码认证更安全,能有效防止暴力破解:
ssh-keygen -t rsa -b 4096 # 生成4096位RSA密钥对(默认保存在~/.ssh/)
ssh-copy-id sftpuser@your_server_ip # 自动将公钥添加到服务器的~/.ssh/authorized_keys
/etc/ssh/sshd_config,设置:PubkeyAuthentication yes # 启用公钥认证
PasswordAuthentication no # 禁用密码认证
重启SSH服务:sudo systemctl restart ssh。
6. 配置防火墙限制访问
使用ufw(Uncomplicated Firewall)限制仅允许特定IP访问SSH(默认端口22):
sudo ufw allow from trusted_ip to any port 22 # 替换trusted_ip为信任的客户端IP
sudo ufw enable # 启用防火墙
sudo ufw status # 查看规则(确认仅允许信任IP)
若未使用ufw,可通过iptables实现类似功能:
sudo iptables -A INPUT -p tcp --dport 22 -s trusted_ip -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j DROP
7. 使用Fail2ban防范暴力破解
Fail2ban可自动检测多次失败登录尝试,并封禁恶意IP:
sudo apt install fail2ban/etc/fail2ban/jail.local,添加:[sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log # Ubuntu日志路径
maxretry = 5 # 5次失败后封禁
bantime = 3600 # 封禁1小时(单位:秒)
重启Fail2ban:sudo systemctl restart fail2ban。
8. 监控与日志审计
定期检查SSH日志(/var/log/auth.log),监控SFTP用户的登录及操作行为:
sudo tail -f /var/log/auth.log # 实时查看日志
sudo grep 'sftpuser' /var/log/auth.log # 筛选特定用户的日志
通过日志可快速发现异常登录(如陌生IP、频繁失败),及时采取措施。
9. 保持系统与软件更新
定期更新系统和OpenSSH软件包,修复已知安全漏洞:
sudo apt update && sudo apt upgrade -y # 更新所有软件包
sudo apt autoremove # 移除无用依赖
建议开启自动更新(sudo apt install unattended-upgrades),确保系统始终处于最新安全状态。