在 Samba 中完全隐藏目录,但可以通过符号链接访问其后代

在 Samba 中完全隐藏目录,但可以通过符号链接访问其后代

由于 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 和 A​​CL 来实现这一点?如果不行,那么什么方法最接近解决方案?

答案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...

相关内容