如何強制 Samba 創建目錄
我需要有關
Samba
配置的幫助。我想要實現的是配置,共享上的 Windows 使用者只能看到他的文件。這可以通過這樣的配置簡單地實現:
使用者由 Windows AD 伺服器授權
[BACKUP] comment = BACKUP STORAGE LOCATION path = /storage/BACKUP read only = no browseable = yes writable = yes create mode = 0600 directory mode = 0700 force directory mode = 0700 force create mode = 0600 access based share enum = yes hide unreadable = yes valid users = "@DOMAINNAME+SOMEUSERGROUP"
它工作正常,但是……在伺服器端,目錄中的所有內容都
/storage/BACKUP
保存了每個使用者的文件。所以我想在這里為每個使用者創建目錄(我不能使用
$$ home $$,因為它已經被使用了) 所以我想保持這樣:
/storage/BACKUP/username/
因此,當我更改路徑並
%U
在最後添加時,一切都差不多了。問題是我需要手動創建目錄
/storage/BACKUP/username
。所以我需要的是
Samba
在使用者訪問這個共享之前以某種方式強制創建這個目錄。我試過添加
add user script = /path/to/mkdir /storage/BACKUP/%U
但這不起作用,因為:
- 我不知道為什麼;)
- 我之前已經有使用者登錄過
- 它應該為新創建的使用者啟動,這對我來說沒問題,但它不起作用。
在他們登錄後,我沒有在 linux 中創建使用者,所以我沒有在其他任何地方使用添加使用者/機器腳本。
因此,當該使用者嘗試連接時,我想強制
Samba
為使用者創建目錄。我從幾個小時開始搜尋Google,但沒有找到適合我的方法。我需要為每個人保留 /server/BACKUP 位置,但在伺服器端,需要將文件保存在每個使用者的單獨目錄中,因此創建新共享也不是解決方案。
您可以為此使用
preexec
orroot preexec
選項。他們指定在連接到共享時執行的腳本。如果preexec
共享以連接使用者身份執行,並以root preexec
.在您的分享中:
[BACKUP] root preexec = /etc/samba/gendir.sh %u
/etc/samba/gendir.sh
看起來有點像這樣:#!/bin/bash DIRECTORY=/storage/BACKUP/$1 if [ ! -d "$DIRECTORY" ]; then mkdir $DIRECTORY fi
根據您的要求,在腳本中添加
chown
和/或chmod
語句。
在我的情況下,情況略有不同——我使用 Samba 作為我的帶有 FreeNAS 的 DC。我不確定這是否是由於 FreeBSD 建構或 Samba 作為 DC,但無論哪種方式,上面@ Sven答案中腳本的使用者名都預先添加了域名,因此 $1 最終成為 DOMAINuser 而不是使用者,並且請求的目錄家庭共享是 DOMAIN\user 而不僅僅是使用者。
我已經像這樣調整了腳本,現在它具有魅力:
#!/bin/bash USERNAME="${1//DOMAIN/}" DIRECTORY=/mnt/tank/domain-homes/DOMAIN/$USERNAME if [ ! -d $DIRECTORY ]; then mkdir -p $DIRECTORY chown DOMAIN\\$USERNAME:wheel $DIRECTORY fi
此外,機器還嘗試創建自己的目錄,並帶有尾隨 _ 字元。使用者名有一個 $ 來指定電腦帳戶。我已經修改了這樣的腳本以支持電腦目錄:
#!/bin/bash USERNAME="${1//DOMAIN/}" DIRECTORY=/mnt/tank/domain-homes/DOMAIN/$USERNAME if [[ "$USERNAME" == *_ ]] then # We have a computer share, so the username has a $ at the end, # the folder retains the _ USERNAME="${USERNAME//_/\$}" fi if [ ! -d $DIRECTORY ]; then mkdir -p $DIRECTORY chown DOMAIN\\$USERNAME:wheel $DIRECTORY fi
我還打算以同樣的方式創建配置文件目錄。