有沒有辦法隱藏一個(或除一個之外的所有)使用者的共享匹配模式中的所有子資料夾?
我想要一個子目錄(我們稱之為_private_data
),它應該可見,user1
但不可見user2
。但我事先無法知道這本目錄在哪裡。可能是user1
先建立一個目錄ShareThis/LookHere
,然後再建立該目錄ShareThis/LookHere/_private_data
。 「user2」也具有讀取ShareThis/LookHere
所有子目錄的權限,但他不應該能夠看到_private_data
子目錄。
有可能做到這一點嗎?我已經找到了hide files
,veto files
和dont descend
選項。這看起來與我想要的非常相似,但我不知道如何將它們僅分配給某些用戶以及如何使它們在共享的任何子目錄中進行匹配。
答案1
最後我找到了解決方案。它的工作原理是包含一個基於用戶名的檔案。您必須為您想要允許瀏覽 _priv 目錄的每個使用者建立(或符號連結)一個文件,但這對我來說很好。
以下是名為“圖像”的共享的範例。
smb.conf:
[Images]
comment = Shared Images
path = /path/to/images
write list = user1, user2
valid users = user1, user2
# make sure the _priv directory cannot be accessed
hide files = /_priv/
veto files = /_priv/
# The following line allows to revert hide and veto options so that
# specific users are allowed to view private directories
include = /etc/samba/allowprivate.conf.%U
然後為每個應該能夠存取目錄的使用者建立一個allowprivate.conf。 (例如allowprivate.conf.user1)包含以下內容:
# This reverts the settings from smb.conf, so that this user
# can access all files
hide files =
veto files =
它甚至適用於子目錄,因此「特權」使用者只能建立一個_priv
目錄,而非特權使用者將無法存取該目錄。
答案2
我想由於該目錄應該被隱藏,所以其他用戶也不應該讀取它。您可能需要查看hide unreadable
本質上隱藏不允許使用者讀取的檔案和目錄的參數。您可以按每股進行設定。
答案3
這是我的解決方案:
- 建立使用者和群組
- 僅允許群組
user1
中的使用者admin
可以看到此資料夾。
[Images]
...
hide unreadable = yes
force user = %U
force group = +smbadmin
# /path/to/images
chmod 770 _priv
chown user1:admin _priv