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。我尝试更改用户的格式(不同类型的 \\),但没有任何效果,除非我从 root shell 运行命令,它会报告正确的结果。

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 它会告诉我 repquota 结果

由于它是第一个连接的用户,因此它的 UID 为 #10000

我这里遗漏了什么?非常感谢。

答案1

事实证明 setquota 在那个阶段没有任何意义,所以您必须使用完整路径来调用它(/usr/sbin/setquota)。

此外,正如预期的那样,它不喜欢 samba 名称。可以使用以下方法修复此问题

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

相关内容