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