Active-Directory

如何強制 Samba 創建目錄

  • February 15, 2022

我需要有關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 但這不起作用,因為:

  1. 我不知道為什麼;)
  2. 我之前已經有使用者登錄過
  3. 它應該為新創建的使用者啟動,這對我來說沒問題,但它不起作用。

在他們登錄後,我沒有在 linux 中創建使用者,所以我沒有在其他任何地方使用添加使用者/機器腳本。

因此,當該使用者嘗試連接時,我想強制Samba為使用者創建目錄。我從幾個小時開始搜尋Google,但沒有找到適合我的方法。

我需要為每個人保留 /server/BACKUP 位置,但在伺服器端,需要將文件保存在每個使用者的單獨目錄中,因此創建新共享也不是解決方案。

您可以為此使用preexecorroot 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

我還打算以同樣的方式創建配置文件目錄。

引用自:https://serverfault.com/questions/576136