Я пытаюсь запустить сценарий, когда пользователь входит в систему с помощью 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.