温馨提示×

SFTP在CentOS怎么设置

小樊
47
2026-01-10 08:00:01
栏目: 智能运维

在 CentOS 上搭建与加固 SFTP 的完整步骤

一 环境准备与安装

  • 安装 OpenSSH 服务端(如未安装):sudo yum install -y openssh-server
  • 启动并设置开机自启:sudo systemctl enable --now sshd
  • 防火墙放行 SSH(默认端口 22):sudo firewall-cmd --permanent --add-service=ssh && sudo firewall-cmd --reload
  • 验证服务状态:sudo systemctl status sshd(应显示 active/running)

二 快速启用 SFTP(系统自带,无需额外组件)

  • SFTP 基于 SSH,默认已启用。编辑 /etc/ssh/sshd_config,确认存在:Subsystem sftp /usr/libexec/openssh/sftp-server
  • 重启服务生效:sudo systemctl restart sshd
  • 客户端连接测试:sftp your_username@your_server_ip(输入密码后进入 SFTP 会话)

三 推荐做法 使用 internal-sftp 并限制用户仅 SFTP

  • 创建专用组与用户(禁止 Shell 登录更安全)
    • 建组:sudo groupadd sftpusers
    • 建用户(示例家目录为 /data/sftp/upload):sudo useradd -m -d /data/sftp/upload -s /sbin/nologin -G sftpusers sftpuser
    • 设置密码:sudo passwd sftpuser
  • 准备目录与权限(Chroot 根目录必须由 root 拥有,且路径上各级目录不可被组/其他写入)
    • 根目录:sudo mkdir -p /data/sftp && sudo chown root:sftpusers /data/sftp && sudo chmod 755 /data/sftp
    • 可写子目录:sudo mkdir -p /data/sftp/upload && sudo chown sftpuser:sftpusers /data/sftp/upload && sudo chmod 755 /data/sftp/upload
  • 配置 SSH(两种方式,二选一)
    • 按用户限制(推荐先单用户验证)
      • /etc/ssh/sshd_config 末尾添加:
        • Match User sftpuser
          • ChrootDirectory /data/sftp
          • ForceCommand internal-sftp
          • AllowTcpForwarding no
          • X11Forwarding no
          • PermitTTY no
    • 按组限制(批量管理)
      • /etc/ssh/sshd_config 末尾添加:
        • Match Group sftpusers
          • ChrootDirectory /data/sftp
          • ForceCommand internal-sftp
          • AllowTcpForwarding no
          • X11Forwarding no
  • 使配置生效:sudo systemctl restart sshd
  • 连接测试:sftp sftpuser@your_server_ip(应仅能访问 /data/sftp 及其子目录)

四 常见问题与排错

  • 配置语法检查:sudo sshd -t(修改 sshd_config 后务必先检查)
  • 目录权限要点(Chroot 失败常见原因)
    • ChrootDirectory 指定目录到系统根目录的每一级,拥有者必须为 root,且不可对组/其他开放写权限(常见为 755/750,绝不能 777)
    • 用户的可写目录应放在 Chroot 根下的子目录中,并单独赋权给该用户
  • 日志排查:tail -f /var/log/secure(登录失败、权限拒绝等会记录于此)
  • 连接异常如“Broken pipe”:优先检查 Chroot 目录及上级目录的拥有者与权限是否符合上面规则

五 安全加固与进阶建议

  • 禁用 Shell 登录:创建用户时使用 -s /sbin/nologin(或 /bin/false
  • 仅用 internal-sftp:在 sshd_config 中使用 Subsystem sftp internal-sftp,配合 ForceCommand internal-sftp
  • 关闭不必要通道:在 Match 段中设置 AllowTcpForwarding no、X11Forwarding no、PermitTTY no
  • 改用密钥登录并禁用密码:
    • 客户端生成密钥:ssh-keygen -t ed25519
    • 上传公钥:ssh-copy-id user@server_ip
    • 服务端禁用密码:PasswordAuthentication no(确保公钥已部署后再改)
  • 防火墙与端口:仅开放 22/TCP,必要时改端口并同步更新防火墙规则
  • 日志与监控:持续关注 /var/log/secure,必要时接入审计/告警

0