Я хочу реализовать условия для 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 приводит к true с exit 0
, но pam_exec принимает его за false.
Кто-нибудь знает, что происходит не так?
Заранее спасибо,
Хельге