wei/个人文档/sftp共享文件夹映射网络驱动器.md
2026-06-04 13:57:41 +08:00

6.0 KiB
Raw Permalink Blame History

CentOS 9 服务器上部署一个安全、受限的 SFTP 服务,然后在 Windows 客户端上通过免费工具将其挂载为一个网络驱动器

整个流程分为两大步:

第一步:在 CentOS 9 上配置 SFTP 服务端

这个步骤的目标是创建一个只能进行文件传输、不能登录 Shell 的安全用户,并将其限制在特定的目录中。

  1. 安装与启动 OpenSSH 服务 CentOS 9 通常预装了 OpenSSH它是 SFTP 服务的基础。如果未安装,可以执行以下命令:

    sudo dnf install -y openssh-server
    

    安装后,启动并设置开机自启:

    sudo systemctl enable --now sshd
    sudo systemctl status sshd # 确认状态为 active (running)
    
  2. 创建 SFTP 用户组和用户 创建一个专用的用户组和用户,并禁止该用户通过 SSH 登录系统。

    # 创建用户组
    sudo groupadd sftpusers
    
    # 创建用户指定组、家目录并禁止shell登录
    # 这里以用户名 'mysftpuser' 为例,你可以自行替换
    sudo useradd -g sftpusers -d /sftp/mysftpuser -s /sbin/nologin mysftpuser
    
    # 为用户设置密码
    sudo passwd mysftpuser
    
  3. 创建目录并设置严格的权限 这是最关键的一步。为了安全SFTP 的 Chroot 目录(即用户的家目录)必须属于 root 用户,且其他用户不能有写入权限。用户实际能读写的应该是其下的子目录。

    # 创建用户的家目录(作为 chroot 的根)
    sudo mkdir -p /sftp/mysftpuser
    
    # 在家目录下创建一个用户可写的 upload 文件夹
    sudo mkdir -p /sftp/mysftpuser/upload
    
    # 设置家目录 /sftp/mysftpuser 的所有者为 root权限为 755
    sudo chown root:root /sftp/mysftpuser
    sudo chmod 755 /sftp/mysftpuser
    
    # 设置 upload 目录的所有者为 mysftpuser组为 sftpusers权限为 755
    sudo chown mysftpuser:sftpusers /sftp/mysftpuser/upload
    sudo chmod 755 /sftp/mysftpuser/upload
    
  4. 修改 SSH 配置文件 (/etc/ssh/sshd_config) 编辑配置文件,启用内部 SFTP 并限制 sftpusers 组的用户。

    sudo vi /etc/ssh/sshd_config
    
    • 找到或添加以下行,注释掉原有的 Subsystem,启用内置 SFTP
      #Subsystem sftp /usr/libexec/openssh/sftp-server
      Subsystem sftp internal-sftp
      
    • 在文件末尾添加以下配置块,对 sftpusers 组生效:
      Match Group sftpusers
          ChrootDirectory /sftp/%u
          ForceCommand internal-sftp
          AllowTcpForwarding no
          X11Forwarding no
      

      %u 会自动替换为用户名,确保每个用户被锁定在自己的家目录中 。

  5. 重启 SSH 服务并检查防火墙 修改配置后,需要重启服务并确保防火墙放行 SSH 端口22

    # 检查配置文件语法是否正确
    sudo sshd -t
    
    # 如果无报错,重启服务
    sudo systemctl restart sshd
    
    # 配置防火墙(如果系统启用了防火墙)
    sudo firewall-cmd --permanent --add-service=ssh
    sudo firewall-cmd --reload
    

第二步:在 Windows 上挂载为网络驱动器

Windows 原生不支持直接挂载 SFTP。因此我们需要安装两个免费软件来让 Windows 获得这个能力。

  1. 在 Windows 上安装必备软件

    • WinFsp: 它是一个底层的文件系统驱动,为 SSHFS-Win 提供运行基础。
    • SSHFS-Win: 这是一个实现了 SSHFS 协议的 Windows 客户端。
    • 操作步骤:
      1. 从 GitHub 或其他可信来源下载 WinFspSSHFS-Win 的安装包。
      2. 务必先安装 WinFsp,再安装 SSHFS-Win全部保持默认设置即可 。
  2. 开始映射网络驱动器

    • 打开 Windows 的文件资源管理器
    • 在左侧导航栏右键点击 “此电脑”,选择 “映射网络驱动器”
  3. 配置驱动器号和文件夹路径

    • 驱动器:选择一个你喜欢的盘符,例如 Z:
    • 文件夹:这是最关键的一步,需要按照 SSHFS-Win 要求的特殊格式填写。假设你的 CentOS 服务器 IP 是 192.168.1.100SFTP 用户名是 mysftpuserSSH 端口是默认的 22那么你应该输入
      \\sshfs\mysftpuser@192.168.1.100
      
      注意:如果 SSH 端口不是默认的22例如改成了 2222则需要在 IP 地址后用感叹号指定端口,格式为 \\sshfs\user@ip!port
    • 勾选 “登录时重新连接”,这样每次开机都会自动挂载。
    • 点击 “完成”
  4. 输入密码并完成连接 系统会弹出一个 Windows 安全窗口,要求你输入 mysftpuser 的密码。输入后即可成功连接。 现在,打开“此电脑”,你就能看到一个新的 Z: 盘,里面就是你 CentOS 服务器上的 /sftp/mysftpuser/upload 目录内容。你可以像操作本地硬盘一样,对它进行拖拽、复制、粘贴等操作。

常见问题排查

  • 连接时提示"Connection closed by remote host":这通常是服务器端的 ChrootDirectory 权限设置错误。请返回第一步的第3点确保 /sftp/mysftpuser 目录的所有者是 root,且权限为 755
  • 因需要暴露22端口 需确保其他用户配置白名单登录 防止被黑
  • 登录后看不到任何文件或无法写入:请检查你是否进入了 upload 目录。因为 mysftpuser 的家目录归 root 所有,你只能看到但无法写入。你需要进入 upload 目录才能上传文件。同时检查 upload 目录的所有者是否为 mysftpuser
  • SELinux 阻止:如果你的 CentOS 启用了 SELinux建议保持启用可能需要执行以下命令来允许 SSH 读写用户目录:
    sudo setsebool -P ssh_chroot_rw_homedirs on