Я хочу реализовать условия для PAM_TYPE open_session и close_session. Благодаря этому я могу в разное время запускать разные действия для входа и выхода.
У меня есть сценарий, который проверяет переменную PAM_TYPE и дает соответствующие коды выхода: выход 0 для успеха и выход 1 в противном случае.
Но у меня возникают странные проблемы со сборкой; pam_exec не получает правильные коды выхода из сценария.
Вот моя реализация для тестирования:
В /etc/pam.d/common-session
Я добавил:
session [success=ignore default=1] pam_exec.so debug seteuid /usr/sbin/test.sh logout
session optional pam_exec.so debug log=/tmp/test_pam.txt /bin/echo "logout reached"
session [success=1 default=ignore] pam_exec.so debug seteuid /usr/sbin/test.sh logout
session optional pam_exec.so debug log=/tmp/test_pam.txt /bin/echo "login reached"
Сценарий /usr/sbin/test.sh
является
#!/bin/bash
# some actions
# invocted by pam_exec.so
echo $PAM_TYPE
case $1 in
logout)
if [ $PAM_TYPE == "close_session" ]; then echo $PAM_TYPE; exit 0; else exit 1; fi
;;
esac
Когда я делаю su пользователю и сразу выхожу из системы, я попадаю в лог-файл
$ cat /tmp/test_pam.txt
*** Mon Jun 3 12:14:07 2019
"login reached"
*** Mon Jun 3 12:15:00 2019
"login reached"
Это странное поведение. Последняя строка должна быть выход достигнут.
Поэтому Пэм каждый раз принимает условие ложным. Но для тестирования я поставил echo $PAM_TYPE;
в истинном состоянии, и это эхо отображается в терминале при выходе из системы. Итак, оператор if приводит к правда с участием exit 0
но pam_exec принимает это как ложное.
Кто-нибудь знает, что происходит не так?
Заранее спасибо,
Helge
У меня есть ответ с другого сайта:
Вы не можете зависеть от переходов в стеке PAM в вызовах close_session. Стек модулей pam «замораживается» в open_session, и идентичные модули в том же порядке вызываются в вызове close_session.
Теперь поведение моих скриптов ясно: мой подход невозможен!