温馨提示×

CentOS SFTP配置教程

小樊
43
2026-01-10 08:06:03
栏目: 智能运维

CentOS SFTP配置教程

一 环境准备与安装

  • 确认系统已安装 OpenSSH 服务器,如未安装可执行:sudo yum install -y openssh-server
  • 启动并设置开机自启:sudo systemctl start sshd && sudo systemctl enable sshd
  • 如启用防火墙,放行 SSH 端口 22sudo firewall-cmd --permanent --add-service=ssh && sudo firewall-cmd --reload
  • 说明:SFTP 基于 SSH,默认与 SSH 共用 22 端口,无需额外安装 FTP 服务。

二 快速搭建仅 SFTP 的专用用户

  • 创建专用组:sudo groupadd sftpusers
  • 创建用户并限制 Shell 登录:sudo useradd -m -G sftpusers -s /sbin/nologin sftpuser,设置密码:sudo passwd sftpuser
  • 配置 SSH 仅允许 SFTP 并限制目录:编辑 /etc/ssh/sshd_config,在文件末尾加入
    Subsystem sftp internal-sftp
    Match Group sftpusers
        ChrootDirectory %h
        ForceCommand internal-sftp
        AllowTcpForwarding no
        X11Forwarding no
    
  • 修正家目录权限(Chroot 要求):sudo chown root:root /home/sftpuser && sudo chmod 755 /home/sftpuser
  • 为用户创建可写目录:sudo mkdir -p /home/sftpuser/uploads && sudo chown sftpuser:sftpusers /home/sftpuser/uploads && sudo chmod 755 /home/sftpuser/uploads
  • 使配置生效:sudo systemctl restart sshd
  • 连接测试:sftp sftpuser@your_server_ip,应只能访问 /home/sftpuser(可写入 upload)。

三 集中目录与多用户隔离

  • 规划目录结构:例如 /data/sftp/%u(按用户隔离),上层目录 /data/sftp 统一管控。
  • 创建目录与权限:
    sudo mkdir -p /data/sftp
    sudo chown root:sftpusers /data/sftp
    sudo chmod 755 /data/sftp
    
  • 添加用户并指定家目录:sudo useradd -g sftpusers -d /upload -s /sbin/nologin alice,设置密码:sudo passwd alice
  • 为用户准备可写目录:sudo mkdir -p /data/sftp/alice/upload && sudo chown alice:sftpusers /data/sftp/alice/upload && sudo chmod 755 /data/sftp/alice/upload
  • 配置 /etc/ssh/sshd_config
    Subsystem sftp internal-sftp
    Match Group sftpusers
        ChrootDirectory /data/sftp/%u
        ForceCommand internal-sftp
        AllowTcpForwarding no
        X11Forwarding no
    
  • 应用:sudo systemctl restart sshd
  • 说明:也可对单用户使用 Match User alice 精确匹配;目录隔离便于运维与审计。

四 常见问题与排错

  • 配置语法检查:修改后先执行 sudo sshd -t,无输出再重启,避免因语法错误导致 sshd 无法启动。
  • “Write failed: Broken pipe / Connection reset by peer”:多由 ChrootDirectory 权限不当引起。规则为:从 Chroot 目录到根目录的所有父目录必须 属主为 root,且不可对“组”或“其他”有写权限(常见为 755)。
  • Match 块位置问题:某些指令(如 UseDNS)不能写在 Match 块内,建议将全局项放在文件前部,Match 块放在末尾,避免报错。
  • SELinux 干扰:如出现莫名其妙拒绝,可临时 sudo setenforce 0 验证;生产环境请使用 semanage 等工具做正确上下文配置,而非长期关闭 SELinux。
  • 日志排查:查看 /var/log/secure 获取登录与 SFTP 失败详情。

五 安全加固与最佳实践

  • 使用 internal-sftp:在进程内运行,配合 Chroot 更安全、性能更好。
  • 禁用不必要功能:在 Match 块中关闭 AllowTcpForwardingX11Forwarding,必要时禁用 PermitTTY
  • 禁止 root 登录:在全局配置中设置 PermitRootLogin no
  • 最小权限原则:Chroot 根目录属主 root、权限 755;用户仅对业务子目录拥有写权限。
  • 集中管理与审计:按组管理用户、统一目录结构、定期更新 OpenSSH

0