温馨提示×

Ubuntu SFTP如何配置才能更安全

小樊
37
2025-12-11 03:55:18
栏目: 智能运维

Ubuntu SFTP 安全配置实践

一 基础安全配置

  • 安装并启用 OpenSSH 服务,确保开机自启与运行状态:sudo apt update && sudo apt install -y openssh-server;sudo systemctl enable --now ssh
  • 使用internal-sftp 子系统并禁用不安全功能:在 /etc/ssh/sshd_config 中设置 Subsystem sftp internal-sftp;对 SFTP 用户组应用 Match 段,开启 ForceCommand internal-sftp,关闭 AllowTcpForwarding no / X11Forwarding no / PermitTunnel no
  • 采用密钥认证优先:启用 PubkeyAuthentication yes,在测试通过后关闭 PasswordAuthentication no,并禁用 ChallengeResponseAuthentication no,减少暴力破解面。
  • 做好目录与权限:Chroot 根目录必须由 root:root 拥有且权限为 755;可写目录放在根目录下并归属相应用户,例如:/sftp 为根,/sftp/uploads 为用户可写目录,权限 700/755 合理设置。
  • 重启使配置生效:sudo systemctl restart ssh
    以上做法兼顾隔离、最小权限与抗攻击性,是 Ubuntu 上 SFTP 的推荐基线。

二 用户与目录隔离

  • 创建专用用户组受限用户:sudo groupadd sftpusers;sudo useradd -g sftpusers -s /usr/sbin/nologin sftpuser(禁止 shell 登录,仅允许 SFTP)。
  • 推荐的目录结构与权限:
    • 共享根:sudo mkdir -p /sftp;sudo chown root:root /sftp;sudo chmod 755 /sftp
    • 用户可写目录:sudo mkdir -p /sftp/uploads;sudo chown sftpuser:sftpusers /sftp/uploads;sudo chmod 700 /sftp/uploads
  • /etc/ssh/sshd_config 对 sftpusers 应用 Match:
    • Match Group sftpusers
      • ChrootDirectory /sftp
      • ForceCommand internal-sftp -d /uploads(登录直接进入 uploads)
      • AllowTcpForwarding no;X11Forwarding no;PermitTunnel no
  • 常见报错与要点:
    • “bad ownership or modes for chroot directory” → Chroot 根目录必须 root:root 且 755
    • 登录后无法上传 → 需在 Chroot 下创建可写子目录并正确授权
    • 登录后目录为空 → 使用 -d 指定默认目录
      上述隔离能限制用户活动范围,避免越权访问系统其他路径。

三 认证与访问控制

  • 强制SSH 公钥登录:客户端生成密钥(推荐 ed255194096-bit RSA),将公钥写入相应用户的 authorized_keys(如 /home/sftpuser/.ssh/authorized_keys 或按 Chroot 位置调整),并设置权限 700/.ssh、600/authorized_keys,所有者为相应用户。
  • 禁用密码与交互式认证:在全局或 Match 段设置 PasswordAuthentication noChallengeResponseAuthentication no,仅保留 PubkeyAuthentication yes
  • 精细化访问控制:
    • 按用户/组限制:使用 Match User/Group 分别下发 Chroot、ForceCommand、端口转发策略
    • 管理员与普通 SFTP 用户分离:为管理员保留 shell 与必要转发,对 SFTP 用户严格限制
    • 可选密钥集中管理:在 Match 中使用 AuthorizedKeysFile /sftp/%u/.ssh/authorized_keys 将公钥随用户目录管理
  • 防火墙与来源限制:仅开放 22/TCP,如使用 ufw 执行 sudo ufw allow 22/tcp;生产环境建议进一步限制为可信 IP/网段访问。

四 加固与运维

  • 保持系统与软件包更新:定期执行 sudo apt update && sudo apt upgrade,及时修补 OpenSSH 漏洞。
  • 启用日志与审计:监控 /var/log/auth.log 的 SFTP 登录与失败尝试,必要时对接集中日志平台进行告警。
  • 避免端口转发与隧道:保持 AllowTcpForwarding no / PermitTunnel no,降低被滥用的风险。
  • 分阶段变更与回滚预案:先备份 /etc/ssh/sshd_config,变更后用 sshd -t 检查语法,另开终端验证登录后再关闭旧会话,确保不会锁死。
  • 客户端最佳实践:使用 ed25519 密钥、禁用口令、配置连接空闲超时、仅使用 sftp 命令而非开放 shell。

五 快速最小可用配置示例

  • 目标:仅允许 sftpuser 通过密钥登录,Chroot 到 /sftp,默认进入 /uploads,禁止转发与 shell。
  • 步骤:
    1. 创建用户与目录
      • sudo groupadd sftpusers
      • sudo useradd -g sftpusers -s /usr/sbin/nologin sftpuser
      • 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
    2. 配置公钥(客户端执行 ssh-keygen -t ed25519,将公钥内容追加到服务器)
      • mkdir -p /home/sftpuser/.ssh
      • echo “公钥内容” | sudo tee /home/sftpuser/.ssh/authorized_keys
      • sudo chmod 700 /home/sftpuser/.ssh && sudo chmod 600 /home/sftpuser/.ssh/authorized_keys
      • sudo chown -R sftpuser:sftpusers /home/sftpuser/.ssh
    3. 配置 /etc/ssh/sshd_config(确保全局有 Subsystem sftp internal-sftp)
      • Match User sftpuser
        • ChrootDirectory /sftp
        • ForceCommand internal-sftp -d /uploads
        • AllowTcpForwarding no;X11Forwarding no;PermitTunnel no
        • PasswordAuthentication no;PubkeyAuthentication yes
    4. 语法检查与重启
      • sudo sshd -t && sudo systemctl restart ssh
    5. 测试
      • sftp -P 22 sftpuser@your_server_ip
        以上示例集成了隔离、最小权限与密钥认证,适合作为生产环境的安全基线。

0