AD Samba 檔案伺服器、PAM、使用者首次連線時設定配額

AD Samba 檔案伺服器、PAM、使用者首次連線時設定配額

當用戶第一次連接到 samba 盒(在 Rocky Linux 8 上運行)時,我嘗試在某些目錄上設定配額。因此,在能夠使用 samba 共享之前,使用者必須連接到電腦(控制台或 ssh,沒關係)。在執行此操作時,pam_exec.so 會執行一個腳本,該腳本會建立一堆資料夾、設定權限並建立檔案。我嘗試在該文件中使用“setquota”命令,但沒有成功。我已在 fstab 檔案中正確設定標誌,因為獨立命令“setquota”在從根會話啟動時可以正常工作。

所以我然後嘗試了 pam_setquota.so 模組,因為無論如何它都會做同樣的事情。不,同樣的結果。我想兩者都真的不喜歡使用者是 ActiveDirectory 使用者格式。使用者格式是 DOMAIN\User (通常需要是 DOMAIN\\User)Samba 將使用者對應到從 10000 開始的 uid。運行該命令,它會報告正確的結果。

pam_exec 執行腳本的片段

if [[ "${PAM_USER}" == *\\* ]];then
    folder="/data/${PAM_USER}"
    if [ ! -d "$folder" ]; then
        mkdir "$folder"
        chmod 555 "$folder"
         .
         .
         .  
        quota_user="${PAM_USER}//\\/\\\\}"
        setquota -u ${quota_user} 0 10485760 0 0 /data
         .
         .
         .
    fi

if

pam_setquota 行 session optional pam_setquota.so fs=/data overwrite=1 startuid=10000 enduid=0 bsoftlimit=0 bhardlimit=10485760 isoftlimit=0 ihardlimit=0

如果我跑步setquota -u DOMAIN\\User 0 10485760 0 0 /datarepquota /data 它會告訴我 重新配額結果

由於它是第一個連接的用戶,因此需要 UID #10000

我在這裡缺少什麼?非常感謝。

答案1

事實證明,setquota 在該階段沒有任何意義,因此您必須使用完整路徑來呼叫它(/usr/sbin/setquota)。

而且,正如所料,它不喜歡桑巴這個名字。可以透過使用來修復

quota_user =`id -u ${PAM_USER}`
/usr/sbin/setquota -u ${quota_user} 0 10485760 0 0 /data

相關內容