Как создать условное поведение с pam_exec и PAM_TYPE? - PullRequest
0 голосов
/ 03 июня 2019

Я хочу реализовать условия для 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.

Кто-нибудь знает, что происходит не так?

Заранее спасибо,

Хельге

1 Ответ

0 голосов
/ 06 июня 2019

У меня есть ответ с другого сайта:

Вы не можете зависеть от переходов в стеке PAM при вызовах close_session.Стек модулей pam «заморожен» в open_session, и идентичные модули в том же порядке вызываются в вызове close_session.

Поведение моих сценариев теперь понятно: мой подход невозможен!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...