SFTP服务器,挂载限制

我正在build立一个SFTP服务器,我必须让用户访问不同驱动器上的个别目录。

我不能使用符号链接,因为它允许他们访问一切,导致导航混淆。

我无法使用cp -r,因为它耗时太长,占用太多空间。

我不能使用cp -al,因为它不会连接不同的设备。 如果只有一个设备,它会很好用。

目前,我正在使用“mount -bind”将不同驱动器上的dirs安装到ftp上的用户homedir上。 我制作了一个脚本,删除不再需要的旧挂载,并在重新启动后恢复挂载,而不涉及fstab。

这似乎是一个马虎的解决scheme,但最终我将有数百甚至数千的坐骑。 有没有更好的方法来做到这一点还是可以接受的? 我可以一次运行的mount –bind的数量有限制吗?

在这种情况下如何使用ACL(访问控制列表)? 所有的现代文件系统都支持ACL,并且与传统的Unix权限相比,您可以更加精细地授予对单个目录/文件的访问权限。

对于初学者来说,试试man setfacl 。 它列出了几个例子。

另一个答案似乎是另一个问题的解决scheme(权限设置为已经存在的目录)。 你的问题听起来像我的,尽pipe…你有主目录,其中/是ftp home而不是真正的文件系统,而且你希望真正的文件系统的某些部分在多个ftp家中。

我有一个类似的东西…这是一场噩梦。 它有几千次坐骑我想。 脚本是越野车,所以它停止工作时需要修补。 那不会是这样一个问题,但卸下数以千计的坐骑和重新安装需要15分钟。 所以我用unionfs重新编写了它。 现在它使用大约260。

这是由几个4磁盘USB盒(我们称之为“穷人的DAS”)完成的。 另一个问题是磁盘会随机断开,需要重新安装。 这意味着所有相关的坐骑都需要重做。 发生这种情况时,Unionfs会自动将它们重新join到挂载中,以便解决问题。 自从我将其切换到unionfs之后,我不必修复这些脚本。 如果我再次使用USB磁盘做类似的事情,即使只有一个磁盘,我也可能会使用unionfs加到一个空的目录树,所以我可以依靠它重新连接。

在我的情况下,所有的文件都是只读的,并且在很多ftp home中有很多磁盘安装在一起,只有3种不同types的用户看到不同的目录,而且磁盘是由不同文件types分隔的相同数据集和date在相同的目录结构。 所以我基本上只安装了3个东西到每个ftp home。

unionfs挂载看起来像这样:

 sudo unionfs-fuse /data/some/local/directory=ro:/mnt/disk1=ro:/mnt/disk2=ro:/mnt/disk3=ro:[...] /mnt/alldisks -o allow_other