6.0 KiB
在 CentOS 9 服务器上部署一个安全、受限的 SFTP 服务,然后在 Windows 客户端上通过免费工具将其挂载为一个网络驱动器
整个流程分为两大步:
第一步:在 CentOS 9 上配置 SFTP 服务端
这个步骤的目标是创建一个只能进行文件传输、不能登录 Shell 的安全用户,并将其限制在特定的目录中。
-
安装与启动 OpenSSH 服务 CentOS 9 通常预装了 OpenSSH,它是 SFTP 服务的基础。如果未安装,可以执行以下命令:
sudo dnf install -y openssh-server安装后,启动并设置开机自启:
sudo systemctl enable --now sshd sudo systemctl status sshd # 确认状态为 active (running) -
创建 SFTP 用户组和用户 创建一个专用的用户组和用户,并禁止该用户通过 SSH 登录系统。
# 创建用户组 sudo groupadd sftpusers # 创建用户,指定组、家目录,并禁止shell登录 # 这里以用户名 'mysftpuser' 为例,你可以自行替换 sudo useradd -g sftpusers -d /sftp/mysftpuser -s /sbin/nologin mysftpuser # 为用户设置密码 sudo passwd mysftpuser -
创建目录并设置严格的权限 这是最关键的一步。为了安全,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 -
修改 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会自动替换为用户名,确保每个用户被锁定在自己的家目录中 。
- 找到或添加以下行,注释掉原有的
-
重启 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 获得这个能力。
-
在 Windows 上安装必备软件
-
开始映射网络驱动器
- 打开 Windows 的文件资源管理器。
- 在左侧导航栏右键点击 “此电脑”,选择 “映射网络驱动器” 。
-
配置驱动器号和文件夹路径
- 驱动器:选择一个你喜欢的盘符,例如
Z:。 - 文件夹:这是最关键的一步,需要按照 SSHFS-Win 要求的特殊格式填写。假设你的 CentOS 服务器 IP 是
192.168.1.100,SFTP 用户名是mysftpuser,SSH 端口是默认的 22,那么你应该输入:
注意:如果 SSH 端口不是默认的22(例如改成了 2222),则需要在 IP 地址后用感叹号指定端口,格式为\\sshfs\mysftpuser@192.168.1.100\\sshfs\user@ip!port。 - 勾选 “登录时重新连接”,这样每次开机都会自动挂载。
- 点击 “完成”。
- 驱动器:选择一个你喜欢的盘符,例如
-
输入密码并完成连接 系统会弹出一个 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