温馨提示×

SFTP在Debian上如何安全配置

小樊
37
2025-12-14 00:11:16
栏目: 智能运维

在 Debian 上安全配置 SFTP 的实操指南

一 基础安装与最小加固

  • 安装 OpenSSH 服务并设为开机自启:
    • sudo apt update && sudo apt install -y openssh-server
    • sudo systemctl enable --now ssh
  • 备份并编辑 SSH 配置:
    • sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
    • sudo nano /etc/ssh/sshd_config
  • 建议的最小安全项(全局段):
    • PermitRootLogin no(禁止 root 远程登录)
    • PasswordAuthentication no(禁用密码,改用密钥;若必须启用密码,请配合强口令与 Fail2ban)
    • PubkeyAuthentication yes
    • KbdInteractiveAuthentication no
    • UsePAM yes
    • MaxAuthTries 3
    • MaxSessions 10
    • AllowUsers/AllowGroups(按需白名单)
    • Port 22(可选变更端口,配合防火墙与合规策略)
  • 说明:SFTP 复用 SSH 的 22 端口,无需额外端口。

二 创建 SFTP 用户与目录隔离

  • 创建受限用户组与用户:
    • sudo groupadd sftpusers
    • sudo useradd -m -s /usr/sbin/nologin -G sftpusers sftpuser
    • sudo passwd sftpuser(若启用密钥认证,可不设密码)
  • 推荐目录结构(集中式 Chroot,便于统一管控):
    • sudo mkdir -p /sftp/uploads
    • sudo chown root:root /sftp
    • sudo chmod 755 /sftp
    • sudo chown sftpuser:sftpusers /sftp/uploads
    • sudo chmod 700 /sftp/uploads
  • 要点:Chroot 根目录必须由 root 拥有且不可被普通用户写入;用户的可写目录应放在根目录下的子目录中,否则会出现 “bad ownership or modes for chroot directory” 或上传报 “permission denied”。

三 配置 SSH 以强制 SFTP 与禁用隧道

  • 在 /etc/ssh/sshd_config 的全局段设置内置 SFTP 子系统:
    • Subsystem sftp internal-sftp
  • 在文件末尾添加对 SFTP 用户组的策略(推荐使用集中式 Chroot):
    • Match Group sftpusers
      • ChrootDirectory /sftp
      • ForceCommand internal-sftp -d /uploads(登录后直接进入可写目录)
      • AllowTcpForwarding no
      • X11Forwarding no
      • PermitTunnel no
  • 若需按用户隔离到家目录(使用 %h),务必保证每个用户家目录由 root 拥有且权限为 755,并在其下创建可写子目录再赋权给用户。
  • 使配置生效:
    • sudo systemctl restart ssh
  • 说明:使用 internal-sftp 更安全且便于与 Chroot 配合;禁用端口转发、隧道与 X11 转发可减少攻击面。

四 防火墙与入侵防护

  • UFW(Debian 常用):
    • 仅开放 22 端口:sudo ufw allow 22
    • 或按来源 IP 限制:sudo ufw allow from 192.168.1.100 to any port 22
    • 启用:sudo ufw enable;查看:sudo ufw status
  • iptables(如需更细粒度控制):
    • 允许某 IP 访问 22:sudo iptables -A INPUT -p tcp --dport 22 -s 192.168.1.100 -j ACCEPT
    • 保存规则(Debian):sudo iptables-save > /etc/iptables/rules.v4
  • 防暴力破解:
    • 安装并启用 fail2ban:sudo apt install -y fail2ban && sudo systemctl enable --now fail2ban
    • 按需配置 /etc/fail2ban/jail.local(SSH 监狱)。

五 密钥认证与连通性测试

  • 客户端生成密钥并部署公钥:
    • ssh-keygen -t ed25519 -C “sftpuser@client”
    • 将公钥内容追加到服务器对应用户的 ~/.ssh/authorized_keys
    • 权限:chmod 700 ~/.ssh;chmod 600 ~/.ssh/authorized_keys;chown -R sftpuser:sftpusers ~/.ssh
  • 服务端若之前禁用了密码,请确保公钥已就位再重启 ssh。
  • 连接测试:
    • sftp -P 22 sftpuser@your_server_ip
    • 登录后验证工作目录:pwd 应显示 /uploads;测试 put/get 是否正常
  • 日志审计:
    • 实时查看认证与 SFTP 活动:sudo tail -f /var/log/auth.log
  • 常见问题排查:
    • 登录失败且提示 “bad ownership or modes for chroot directory” → Chroot 根目录非 root 拥有或权限过宽
    • 能登录但无法上传 → 可写子目录未正确赋权或未在 ForceCommand internal-sftp -d 中指定
    • 修改配置后无法连接 → 检查语法(sshd -t)、端口与防火墙策略,必要时回滚到备份配置。

0