如何在 Windows Server 上的 OpenSSH 中限制用户使用 sftp?

如何在 Windows Server 上的 OpenSSH 中限制用户使用 sftp?

我正在使用从以下位置下载的 OpenSSHhttps://github.com/PowerShell/Win32-OpenSSH/releases

我的目标是设置一个 ssh 服务器,允许在没有 ssh 访问的情况下传输 sftp 文件。根据 OpenSSH 提供的官方文档,Windows 自 7.7 版起就应该支持此功能。发布后应该在 sshd_config 中设置限制,我尝试使用此文件一段时间,但我无法限制自己只能访问子文件夹,这是我在配置文件中添加的内容:

Subsystem   sftp    sftp-server.exe
ForceCommand internal-sftp 
ChrootDirectory c:\users\myusername 
AllowTcpForwarding no 
PermitTunnel no
GatewayPorts no

有人能告诉我为什么这不起作用吗?或者我无法像这样仅设置 SFTP 访问?

另一个选项是禁用 SSH 连接。如何在 Windows 中使用 OpenSSh 实现此目的?

答案1

来自 Mika-nPowerShell-OpenSSH GitHub

这适用于 OpenSSH-Win64 8.1.x 版本,但您需要设置以下 sshd_config 选项(默认情况下位于%PROGRAMDATA%\SSH\Windows 平台的文件夹位置):

ForceCommand internal-sftp 
Subsystem  sftp   sftp-server.exe -d "D:\MyDataRoot\" 
ChrootDirectory D:\MyDataRoot

PermitTunnel no 
AllowAgentForwarding no 
AllowTcpForwarding no
X11Forwarding no 
AllowUsers sftpuser

因此,请考虑添加子系统行来-d设置文件夹,或添加-d到您的ForceCommand条目中。

请注意,您还应确保用户具有正确的文件系统权限,以将其包含在文件夹中。

答案2

以下是对我有用的方法:

# Forcing SFTP functionality, needed for ChrootDirectory parameter below
ForceCommand internal-sftp 
Subsystem  sftp   sftp-server.exe -d c:\home\

# Specify the default folder the user sees after SFTP authentication. Without this, users will see C:\users\myuser\ as default folder, which is not usually preferable

Match User <domain>\myuser1
ChrootDirectory c:\home\test1\

Match User <domain>\myuser2
ChrootDirectory c:\home\test2\

# Disable tunneling, authentication agent, TCP and X11 forwarding.
# Below parameters are recommended as best practice to prevent certain security bypassing
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no
GatewayPorts no

相关内容