Файловый сервер AD Samba, PAM, устанавливает квоту при первом подключении пользователя

Файловый сервер AD Samba, PAM, устанавливает квоту при первом подключении пользователя

Я пытаюсь установить квоту на некоторые каталоги, когда пользователь впервые подключается к 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

Связанный контент