Я пытаюсь запустить сценарий, когда пользователь входит в систему с помощью 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
Сценарий создания ссылки:
#!/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: ошибка запрещена в разрешении». файл журнала /tmp/pam_exec.log не создается.
Запуск linux mint 18
Схожу с ума по этому поводу ... Любая помощь приветствуется !!!!
Всем спасибо за ваше время
Одна из возможных причин для входа в систему теперь все неудачи - это статус выхода из вашего скрипта. Если ваш сценарий возвращает ненулевое значение, это считается pam_exec
ошибкой, и установка сеанса может быть прервана. (Фактическое решение об отмене неочевидно; похоже, это связано с количеством дополнительных
модулей, задействованных в стеке.)
Глядя на ваш код, вы используете $ 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.