Назад | Перейти на главную страницу

pam_exec в linux mint не работает

Я пытаюсь запустить сценарий, когда пользователь входит в систему с помощью pam_exe.so.

/etc/pam.d/common-sesion является:

session required    pam_unix.so 
session optional    pam_sss.so 
session optional    pam_systemd.so 
session optional    pam_ecryptfs.so unwrap
session optional    pam_ck_connector.so nox11

session required    pam_oddjob_mkhomedir.so umask=0077 

# end of pam-auth-update config

session optional    pam_exec.so   debug seteuid log=/tmp/pam_exec.log /usr/local/createlink

Скрипт createlink:

#!/bin/bash

if [ ! -L /home/$PAM_RUSER/zdrive ]; then
    ln -s /mnt/dcs/home/$PAM_RUSER /home/$PAM_RUSER/zdrive
fi

и

$ ls -l /usr/local/createlink
-rwxr-xr-x 1 root root 200 Apr 18 15:10 createlink*

Однако при этом пользователю не разрешается входить в систему .. он показывает ошибку аутентификации при входе в систему графически

когда я su - из командной строки я получаю сообщение «su: permission denied error». файл журнала /tmp/pam_exec.log не создается.

Запуск linux mint 18

Схожу с ума по этому поводу ... Любая помощь приветствуется !!!!

Спасибо всем за ваше время

Одной из возможных причин неудачных попыток входа в систему является статус выхода из вашего скрипта. Если ваш скрипт возвращает ненулевое значение, он считается pam_exec быть ошибкой, и установка сеанса может быть прервана. (Фактическая решимость прервать операцию неочевидна; похоже, это связано с количеством optional модули, участвующие в стеке.)

Глядя на свой код, вы используете $PAM_RUSER вместо того $PAM_USER для идентификации учетной записи пользователя, которая выполняет вход. $PAM_RUSER (обычно) пуст, поэтому ваш код становится эквивалентным этому

if [ ! -L /home/zdrive ]; then
    ln -s /mnt/dcs/home/ /home/zdrive
fi

Если ссылка не изначально существует, он создан, и статус выхода сценария хороший. При повторном и последующем вызове скрипта ссылка воля изначально существует, поэтому тест не проходит, и это подразумеваемый статус выхода скрипта.

Вы можете исправить это, немного изменив свой код:

#!/bin/bash

if [ ! -L "/home/$PAM_USER/zdrive" ]; then
    ln -s "/mnt/dcs/home/$PAM_USER" /home/$PAM_USER/zdrive"
fi
exit 0

Еще одна полезная часть отладки - системный журнал. Не сбрасывайте со счетов это. Например, поместив эту строку сразу после #! строка предоставит вам информацию в /var/log/user.log или эквивалент вашего дистрибутива:

logger -t "${0/*\/}" "id=$(id); PAM_RHOST=$PAM_RHOST, PAM_RUSER=$PAM_RUSER, PAM_SERVICE=$PAM_SERVICE, PAM_TTY=$PAM_TTY, PAM_USER=$PAM_USER, PAM_TYPE=$PAM_TYPE."

Пример вывода для ssh roaima@localhost whoami:

Jul  4 22:48:56 vml1 pam_exec_test.sh: id=uid=0(root) gid=0(root) groups=0(root); PAM_RHOST=localhost, PAM_RUSER=, PAM_SERVICE=sshd, PAM_TTY=ssh, PAM_USER=roaima, PAM_TYPE=open_session.
Jul  4 22:48:56 vml1 pam_exec_test.sh: id=uid=0(root) gid=0(root) groups=0(root); PAM_RHOST=localhost, PAM_RUSER=, PAM_SERVICE=sshd, PAM_TTY=ssh, PAM_USER=roaima, PAM_TYPE=close_session.