我试图给user2只访问他的主目录和完整的权限/cygdrive/e 。 我在他的$home创build了一个Data/目录,在/etc/fstab (见下面)中添加了一个bind指令,并发出了一个mount -a 。
我已经安装了cygwin并运行了sshd(OpenSSH_6.1p1)。 当连接到在sftp子系统中启用的ChrootDirectory , ~/Data似乎没有内容。 即使我将/cygdrive/e的权限recursion更改为0777 ,结果也是一样的。 在sshd_config为该用户激活ChrootDirectory ,不会显示任何内容。
但是,在使用相同的用户帐户进行连接而不更改任何权限的情况下,在注释掉sshd_config底部的Subsystem部分并重新启动sshd之后, ~/Data的内容将完全填充。
那么我怎么能在/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/erecursion所有权属于Administrators:Users 。 user2 Windows帐户是Users以及Administrators的成员。 所有的目录都有一个0755的掩码。 所有文件都有一个掩码0644 。
我对于拥有pipe理员权限的用户2并不满意,但我会在稍后处理。 一个问题一次。
不幸的是,这是不可能的。 许多元素共谋打败你在任何时候。
显然,在cygwin中mount的performance与在POSIX操作系统中有很大的不同。 在cygwin中, mount被限制在当前login会话的范围内。 这意味着,如果您将设备安装为user1 ,则user2将不具有可用的安装。
无论装载types是bind ,更传统的ntfstypes装载还是cifsnetworking共享都无关紧要。 没有任何types的绑定是持久的。 即使你mount --change-cygdrive-prefix /path/to/jail ,sftp用户也不会看到它,事实上,其他特权用户也不会。

随着sftp客户端连接, /cygdrive/e尚不存在。 即使这样做,还有一个问题。 请记住,每个从/path/to/jail stem /path/to/jail到stern的目录都必须由root拥有。 由于/cygdrive是在用户会话的运行时装载的, /cygdrive的所有者是当前用户。 和chown root:whatever /cygdrive什么也不做 – 没有错误,但没有效果。
不幸的是,从客户端交互的angular度来看, mklink只是制作捷径的一种奇特的方式。 无论您是制作文件或目录符号链接,硬链接还是联结,都无关紧要。 sftp客户端将它们全部看作是带有箭头的图标mklink不会欺骗sftp客户端使用特定的欺骗手段。
没有办法教一个internal-sftp chroot来理解cygwin对mount的尴尬模仿。 其他人已经尝试过,但即使是专家也是混乱的 。
这可能是可能的。 我还没有尝试过,因为包装器似乎没有简单的方法来区分chroot-jailed用户的特权,我仍然希望能够用我自己的帐户浏览完整的文件系统。 此外,build立一个完整的chroot监狱环境,使我的审美情趣的细腻感。 我宁愿login用户有更less的地方迷路。 如果这是合理的话,我更喜欢低含量的内容比例。
在我的Windows PC上,我共享了我希望可以通过sftp访问的文件夹。 在一个小型的Linux设备PC上,我通过autofs映射了相应的cifs共享,并在fstab中设置了延迟 mount bind ,将autofs挂载中的目录绑定到internal-sftp chroot jail中的挂载点。 它的工作非常棒! 客户端连接到我的Linux设备上/下载我的Windows共享文件。 对于用户来说,整个事情是完全透明的。 对我来说,设置是容忍重新启动和无忧。
也许这对于类似情况的人来说是一个很好的借口,可以得到一个树莓派或者一个类似的Plug PC,并且做同样的事情。