首先,我对这个领域还很陌生,所以我的技术词汇量可能不如大家。
我已经创建了 Windows 2016 服务器并成功安装了 OpenSSH SFTP 服务器。不幸的是,当我登录到我的 SFTP 用户时,我可以访问 C 盘中的所有文件夹。我谷歌了一下,发现这是因为没有对该用户设置限制。
我在 Google 上搜索了几个小时,找到了很多文章,但我还是感到很困惑。似乎 OpenSSH 没有一种简单的方法来控制文件夹限制以指定用户,并且有几种方法可以做到这一点 - 直接在 Windows 服务器中设置用户组策略(似乎找不到关于此的文章)、下载 Cygwin、使用其他 SFTP 服务器软件、使用 OpenSSH 服务器配置文件解决问题。坦率地说,我不知道该使用什么或遵循什么。
我的最终结果是允许 1 个用户对 FTP_Folder(根文件夹)下的文件夹有 1 个访问权限。例如,User1 只能访问 Site1 文件夹,而 User2 只能访问 Site2 文件夹。Site1 和 Site2 文件夹都存储在名为 FTP_Folder 的根文件夹中。
最好的方法是什么?
答案1
您很可能正在文件中搜索chroot
等效内容。ChrootDirectory
%programdata%\ssh\sshd_config
此指令仅支持 sftp 会话,在我看来,这正是您要找的。远程会话 (SSH) 进入服务器 ( cmd.exe
oder powershell.exe
) 将不是尊重这一点。
要设置仅 sftp 的 chroot 服务器,请设置ForceCommand
为internal-sftp
。您也可以通过实现仅允许 scp 和 sftp 的自定义 shell 来设置带有 chroot 的 scp。
为了简单起见:
- 创建一个 Windows 组,其中包含所有 SFTP 用户
- 确保该组有权访问您的目标目录
- 添加
subsystem sftp internal-sftp
到你的 sshd_config(或者更改它) - 通过以下方式将新组限制到目录
ChrootDirectory
中sshd_config
例如:
Match Group myfriendlyusergroup
ChrootDirectory /myfriendlyusergroupshomedirectory
AllowTCPForwarding no
X11Forwarding no
ForceCommand internal-sftp