回答

回答

我试图user2仅授予对他的主目录的访问权限和对 的完全权限/cygdrive/e。我Data/在他的 中创建了一个目录$homebind在 中添加了一条指令/etc/fstab(见下文),并发出了mount -a

我已安装 cygwin 并运行 sshd (OpenSSH_6.1p1)。ChrootDirectory在 sftp 子系统中启用连接时,~/Data似乎没有内容。即使我将 的权限递归更改/cygdrive/e0777,结果也是一样的。ChrootDirectory在 中对该用户启用sshd_config,则不会显示任何内容。

但是,使用相同的用户帐户进行连接而不更改任何权限,~/Data在我注释掉Subsystem底部的部分sshd_config并重新启动 sshd 后,的内容将完全填充。

那么我该如何授予这只猫上帝模式权限,/cygdrive/e而不授予他浏览文件系统任何其他部分的能力呢?我遗漏了什么?


我的底部sshd_config如下:

Subsystem       sftp    internal-sftp
Match User user2
  ChrootDirectory /home/%u
  X11Forwarding no
  AllowTcpForwarding no
  ForceCommand internal-sftp

其中唯一一行内容/etc/fstab如下:

/cygdrive/e /home/user2/Data none bind,posix=0,user

目前, 的递归所有权/cygdrive/e属于Administrators:Users。Windowsuser2帐户是 的成员,Users也是的成员Administrators。所有目录的掩码为0755。所有文件的掩码为0644

我并不热衷于user2拥有机器的管理员权限,但我稍后会处理这个问题。一次解决一个问题。

答案1

回答

不幸的是,这是不可能的。许多因素会合谋在每个回合击败你。

为什么不在监狱内创建一个挂载点?

显然,mountcygwin 中的行为与 POSIX 操作系统中的行为有很大不同。在 cygwin 中,mount仅限于当前登录会话的范围。这意味着如果您将设备安装为用户1, 然后用户2将无法使用这个坐骑。

bind挂载类型是、更传统的ntfs类型挂载还是网络共享都无关紧要cifs。没有哪种类型的绑定是持久的。即使您mount --change-cygdrive-prefix /path/to/jail,sftp 用户也不会看到它——事实上,其他特权用户也不会看到它。

安装范围证明

好的,那么,为什么不把监狱放在/cygdrive/e 里面呢?

当 sftp 客户端连接建立时,/cygdrive/e还不存在。即使它存在,还有另一个问题。请记住,从 的开头到结尾的每个目录都/path/to/jail必须由 拥有root。由于 是/cygdrive在运行时为用户会话安装的, 的所有者/cygdrive是当前用户。 并且chown root:whatever /cygdrive什么也不做——没有错误,但也没有效果。

那么主机操作系统解决方案呢?Windows 硬链接或连接是否可行?

不幸的是,从客户端交互的角度来看,mklink这只是一种创建快捷方式的奇特方式。无论您是创建文件或目录符号链接、硬链接还是连接,都没有关系。sftp 客户端将它们全部视为带有箭头的图标, mklink无法用其特定的欺骗方法欺骗 sftp 客户端。

接受失败

根本没有办法教internal-sftpchroot 理解 cygwin 对 的笨拙模仿mount。其他人也尝试过,但即使是专家们感到困惑

那么,不要使用 internal-sftp。制作一个包装脚本以在连接时执行挂载。

这也许是可能的。我还没有尝试过,因为似乎没有简单的办法包装器需要区分特权用户和 chroot 监禁用户,我仍然希望能够使用自己的帐户浏览整个文件系统。此外,设置完整的 chroot 监禁环境会冒犯我微妙的审美感。我宁愿登录用户少迷路。如果有意义的话,我更喜欢低垃圾与内容比率。

你接下来打算怎么办?

在我的 Windows PC 上,我共享了我希望 sftp 可以访问的文件夹。在一台小型 Linux 设备 PC 上,我通过以下方式映射了相应的 cifs 共享自动文件系统,以及设置延迟 mount bind在 fstab 中设置,将autofs挂载中的目录绑定到 chroot jail 内的挂载点internal-sftp。它工作得非常好!客户端连接到我的 Linux 设备以上传/下载 Windows 共享上的文件。对于用户来说,整个过程完全透明。对我来说,该设置可以容忍重新启动并且无忧无虑。

对于处于类似情况的人来说,这或许是一个很好的借口,可以买一台 Raspberry Pi 或某种类型的 Plug PC 并做同样的事情。

相关内容