当用户首次连接到 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 /data
,repquota /data
它会告诉我
由于它是第一个连接的用户,因此它的 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