我设置了一个用户来 ssh 到 Windows Server 2008 R2。
我能够更改默认目录。
我唯一无法弄清楚的是如何限制用户只能进入该目录。
换句话说,我不希望用户能够更改目录。
请指教。
编辑:
我的立场是这样的:
- Cygwin 安装
James
在 Windows 中创建的用户 ( )- 在 Windows 中创建的组(SftpUser)
SftpUser
未显示在 /etc/passwd 中- 詹姆斯是某个
None
团体的成员 - 我可以用我的用户登录
cygdrive
并dev
列出了目录(我不想要这个)cygdrive
是空的
以下是场景
我希望James
将sftpUser
群组限制在其上传文件夹中。路径位于外部驱动器上:
D:\uploads\james_folder\
在 cygwin 中
/cygdrive/d/uploads/james_folder/
我不介意限制
/home/james/upload
然后将目录挂载在主路径下,但似乎 cygwin 没有与 samba 捆绑在一起。
sshd_配置
Match user james
ChrootDirectory /home/james/upload/
ForceCommand internal-sftp
答案1
我最近在 cygwin 上设置了 SFTP,我意识到我们无法隐藏以下目录:
- /cygdrive
- /dev
您可能知道 /path/to/sftp 必须由 root 拥有,并且任何其他用户或组都无法写入,您需要将 /etc/passwd 中的用户 ID 更新为 0,因为 Windows 中没有 root 概念。
如果您将用户限制在非 cygdrive(例如 /sftp)中,您将只能看到 /cygdrive(/cygdrive 下不会出现任何内容)。
如果您将用户限制在 cygdrive(例如 /cygdrive/d/.../sftp)中,您将看到 /cygdrive/d。但是,如果您正确设置,则无法更改任何父目录。
希望以上信息对您有帮助!
请检查以下事项:
- 确保 /etc/passwd 中当前登录用户(示例中为 james)的用户 ID 为零。这是因为 cygwin 会将 root 下所有目录的用户更改为当前登录用户。请运行命令
ls -l /
进行验证。 - 确保 /home、/home/james、/home/james/upload 为当前用户所有(即相当于用户 ID 为 0 的 root 所有)。
确保 /etc/sshd_config 包含:
Match user james ChrootDirectory /home/james/upload/ ForceCommand internal-sftp
答案2
你需要ChrootDirectory
在sshd_配置
ArchLinux 的详细说明请参见SFTP chroot。
基本概要如下:
1)添加chroot配置如下sshd_confg
:
Match User username
ChrootDirectory /home/%u
ForceCommand internal-sftp
2)使用以下命令更改 chroot 目录权限:
chown root.root /home/<user>
usermod -d / <user>
3)使用类似以下方法修复authorized_keys的路径:
AuthorizedKeysFile %h/.ssh/authorized_keys
A邮政在 cygwin 邮件列表中报告使用此方法成功限制了与上述类似的配置的访问。