在 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...

相關內容