由于 Samba 处理符号链接和宽链接的方式(它只能区分“共享根内”或“共享根外”),我想在共享根中创建到“实际”目录的固定符号链接,然后防止在用户浏览网络共享时直接向用户显示“实际”目录,如图所示。
这可能吗?
实际结构(FreeBSD 文件服务器):
share_root
--- data1
--- data3
--- data4
--- data5
--- data6
--- data2
--- data7
--- data8
--- data9
--- d4 (=symlink to data4)
--- d6 (=symlink to data6)
--- d9 (=symlink to data9)
用户看到的内容(Windows 客户端):
share_root
--- d4 (and all data4's subdirs)
--- d6 (and all data6's subdirs)
--- d9 (and all data9's subdirs)
(note: actual access to any dir is controlled by ACLs on data1/data2
and their subdirs, so this just cleans up the tree seen by a user
when they browse the share; it doesn't create any security)
本质上“真实”目录 data1/data2 包含用户可以/不能访问的目录组合,并且该访问由 ACL 强制执行。
但是当用户访问共享时,我希望他们首先看不到这些目录。
“普通”隐藏文件将显示在 Windows 资源管理器中,因此我无法使用“隐藏文件”或点文件来执行此操作。如果有帮助,我可以使用其他方法,例如否决文件、访问控制枚举、ACL 读取/遍历等。但是我只想阻止将 data1/data2 直接显示给用户 - 我不想终止遍历通过符号链接 d4/d6/d9到 data1/data2 的子目录。
是否可以结合使用访问控制枚举、smb.conf 和 ACL 来实现这一点?如果不行,那么什么方法最接近解决方案?
答案1
我不确定我是否完全理解您的请求,但使用nullfs
坐骑是我首先想到的策略。
不考虑物理的实际结构。physical_root
为了本示例的目的,我们调用它。
为创建一个新的空目录share_root
,并在 smb4.conf 中将 Samba 指向它。
在 下share_root
,为您想要向 Samba 客户端公开的所有目录创建挂载点:
for DIR in d4 d6 d9; do
mkdir /share_root/$DIR
done
现在将实际的物理目录挂载到虚假share_root
空间中:
mount_nullfs /physical_root/data1/data4 /share_root/d4
mount_nullfs /physical_root/data1/data6 /share_root/d6
mount_nullfs /physical_root/data2/data9 /share_root/d9
可以将这些挂载添加到 /etc/fstab,可能使用“late”选项:
/physical_root/data1/data4 /share_root/d4 nullfs rw,late 0 0
...etc...