温馨提示×

Linux SFTP配置步骤详解

小樊
39
2025-12-24 18:16:07
栏目: 智能运维

Linux SFTP配置步骤详解

一 环境准备与安装

  • 确认系统已安装 OpenSSH 服务器;大多数发行版默认已安装。检查示例:
    • Debian/Ubuntu:dpkg -l | grep ssh
    • RHEL/CentOS/Fedora/Rocky:rpm -qa | grep ssh
  • 如未安装,使用包管理器安装:
    • Debian/Ubuntu:sudo apt-get update && sudo apt-get install openssh-server
    • CentOS/RHEL:sudo yum install openssh-server
    • Fedora:sudo dnf install openssh-server
  • SFTP 基于 SSH,与 SSH 共用 22 端口,无需额外开放端口。

二 创建 SFTP 用户与目录结构

  • 创建专用用户组与用户(禁止 Shell 登录,仅用于 SFTP):
    • sudo groupadd sftpgroup
    • sudo useradd -G sftpgroup -d /srv/sftpuser -s /sbin/nologin sftpuser
    • sudo passwd sftpuser
  • 建立目录并设定 chroot 与可写目录:
    • sudo mkdir -p /srv/sftpuser
    • sudo chown root:root /srv/sftpuser
    • sudo chmod 755 /srv/sftpuser
    • sudo mkdir -p /srv/sftpuser/data
    • sudo chown sftpuser:sftpgroup /srv/sftpuser/data
    • sudo chmod 755 /srv/sftpuser/data
  • 说明:chroot 根目录必须由 root 拥有且权限为 755,可写目录由 SFTP 用户拥有,否则上传会失败。

三 配置 OpenSSH 启用 SFTP 并限制访问

  • 编辑 /etc/ssh/sshd_config
    • 使用内置子系统:Subsystem sftp internal-sftp
    • 在文件末尾添加(按用户组限制示例):
      Match Group sftpgroup
          ChrootDirectory %h
          ForceCommand internal-sftp
          X11Forwarding no
          AllowTcpForwarding no
          PasswordAuthentication yes   # 如需密钥登录,可改为 no 并配置公钥
      
    • 如需按用户限制,可将 Match Group sftpgroup 改为 Match User sftpuser
  • 使配置生效:
    • Ubuntu/Debian:sudo systemctl restart ssh
    • CentOS/RHEL/Rocky:sudo systemctl restart sshd
  • 要点:
    • 使用 internal-sftp 便于与 ChrootDirectory 配合。
    • ForceCommand internal-sftp 禁止该用户获得交互式 Shell。
    • 禁用 X11ForwardingAllowTcpForwarding 降低攻击面。

四 客户端连接与常用操作

  • 命令行连接:
    • 默认端口:sftp sftpuser@SERVER-IP
    • 自定义端口(例如 2222):sftp -P 2222 sftpuser@SERVER-IP
  • 基本命令:
    • 列目录:ls;切换目录:cd
    • 上传:put local_file [remote_file];下载:get remote_file [local_file]
    • 上传目录:put -r local_dir [remote_dir];下载目录:get -r remote_dir [local_dir]
    • 退出:exitbye
  • 图形客户端:如 FileZilla、WinSCP 等,选择 SFTP 协议,填写主机、端口、用户名与密码/密钥即可。

五 权限与安全加固

  • 目录与所有权:
    • chroot 根目录(如 /srv/sftpuser)必须为 root:root 且权限 755;可写子目录(如 /data)由 sftpuser 拥有,权限建议 755/750
  • 仅 SFTP 访问:
    • 通过 Match User/Group + ForceCommand internal-sftp 限制;必要时将用户 Shell 设为 /sbin/nologin
  • 认证方式:
    • 建议优先使用 SSH 密钥(禁用密码或设为 no),提升安全性。
  • 网络与系统:
    • 使用防火墙仅允许可信 IP 访问 22 端口;定期更新系统与软件包;监控 SSH/SFTP 日志。
  • SELinux(如启用):
    • 可能需要为 SFTP 目录设置正确的 SELinux 上下文,例如:sudo semanage fcontext -a -t ssh_home_t "/srv/sftpuser(/.*)?" && sudo restorecon -Rv /srv/sftpuser
  • 常见问题速查:
    • 登录被拒绝或无法进入交互 Shell:检查 ForceCommand internal-sftpChrootDirectory 路径与权限。
    • 上传失败(Permission denied):确认可写目录的所有者是 sftpuser,且 chroot 根为 root:root 755
    • 修改端口后连接失败:客户端需使用 -P 指定新端口;同时确认防火墙放行。

0