Pam
Перейти к навигации
Перейти к поиску
Содержание
Запустить сценарий при входе пользователя в GNU/Linux с передачей в него логина и пароля
Добавляем вызов сценариев
В одном из файлов
/etc/pam.d/system-auth-<тут зависит от контекста, смотря какая аунентификация используется>
например, это может быть файл
/etc/pam.d/system-auth-local
добавляем строку
auth optional pam_exec.so expose_authtok /opt/pam_exec_hook_auth
последней в область секций, начинающихся с
auth
Добавляем строку
session optional pam_exec.so /opt/pam_exec_hook_session
последней в область секций, начинающихся с
session
Создаём сценарии
Для pam auth
cat << 'EOF' > /opt/pam_exec_hook_auth #!/bin/bash login="$PAM_USER" read password echo "$password" > "/root/.pass_$login" chmod 400 "/root/.pass_$login" exit 0 EOF
Для pam session
cat << 'EOF' > /opt/pam_exec_hook_session #!/bin/bash login="$PAM_USER" password=`head -1 /root/.pass_${login}` /bin/rm /root/.pass_${login} if [ ! -z "$password" ]; then curl -s -X POST \ -H 'Content-Type: application/json' \ -d "{\"login\": \"$login\", \"password\": \"$password\"}" \ http://zimbrahost:65432/ & fi exit 0 EOF
Предполагается что с доменом
zimbrahost
в файле
/etc/hosts
сопоставлен ip адрес сервера с zimbra, интеграция с которой предполагается.
делаем файлы исполняемым
chmod +x /opt/pam_exec_hook_*
Как это работает?
Пользователь входит в систему, скрипт
/opt/pam_exec_hook_auth
после успешного входа пользователя получает логин и пароль и сохраняет пароль в файл
/root/.pass_<логин пользователя, пароль которого сохраняется>
затем на этот файл устанавливаются права "только чтение для хозяина (хозяин root)"
0400
На этапе pam session выполняется скрипт
/opt/pam_exec_hook_session
, который достаёт пароль из файла
/root/.pass_<логин пользователя, пароль которого сохраняется>
, сразу же удаляет этот файл, затем запускает пользовательский сценарий, например, вызывая сервис интеграции.
Пример сервиса интеграции с zimbra описан здесь