由於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...