Я пытаюсь установить квоту на некоторые каталоги, когда пользователь впервые подключается к samba box (который работает на Rocky Linux 8). Поэтому, прежде чем использовать общий ресурс samba, пользователь должен подключиться к машине (консоль или ssh, неважно). При этом pam_exec.so запускает скрипт, который создает кучу папок, устанавливает разрешения и создает файлы. Я пытался использовать команду "setquota" в этом файле, но безуспешно. Я правильно установил флаги в файле fstab, так как отдельная команда "setquota" работает правильно при запуске из сеанса root.
Поэтому я затем попробовал модуль pam_setquota.so, так как он в любом случае сделает то же самое. Нет, тот же результат. Думаю, обоим действительно не нравится, что пользователь имеет формат ActiveDirectory User. Формат пользователя — DOMAIN\User (и обычно это должен быть DOMAIN\\User). Samba сопоставляет пользователя с uid, начиная с 10000. Я пробовал изменить формат пользователя (различные разновидности \\), но ничего не работает, за исключением того, что если я запускаю команду из оболочки root, она сообщает правильные результаты.
фрагмент скрипта запуска 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