温馨提示×

Ubuntu SFTP如何安全使用

小樊
41
2025-10-12 18:05:28
栏目: 智能运维

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
    
  • 配置SSH启用公钥认证
    编辑/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:

  • 安装Fail2ban:sudo apt install fail2ban
  • 配置SSH防护:编辑/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),确保系统始终处于最新安全状态。

0