Pam: различия между версиями
Перейти к навигации
Перейти к поиску
Vovan (обсуждение | вклад) (→Как это работает?) |
Vovan (обсуждение | вклад) (→Для pam session) |
||
| (не показано 7 промежуточных версий этого же участника) | |||
| Строка 1: | Строка 1: | ||
==Запустить сценарий при входе пользователя в GNU/Linux с передачей в него логина и пароля== | ==Запустить сценарий при входе пользователя в GNU/Linux с передачей в него логина и пароля== | ||
| − | ===Добавляем вызов | + | ===Добавляем вызов сценариев=== |
В одном из файлов | В одном из файлов | ||
| Строка 13: | Строка 13: | ||
добавляем строку | добавляем строку | ||
| − | auth optional pam_exec.so expose_authtok /opt/ | + | 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==== | ||
<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" | ||
| + | password=`head -1 /root/.pass_${login}` | ||
| + | /bin/rm /root/.pass_${login} | ||
| + | if [ ! -z "$password" ]; 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> | ||
| Строка 42: | Строка 69: | ||
сопоставлен ip адрес сервера с zimbra, интеграция с которой предполагается. | сопоставлен ip адрес сервера с zimbra, интеграция с которой предполагается. | ||
| − | делаем | + | делаем файлы исполняемым |
| − | chmod +x /opt/ | + | chmod +x /opt/pam_exec_hook_* |
===Как это работает?=== | ===Как это работает?=== | ||
| − | Пользователь входит в систему, /opt/ | + | Пользователь входит в систему, скрипт |
| + | |||
| + | /opt/pam_exec_hook_auth | ||
| + | |||
| + | после успешного входа пользователя получает логин и пароль и сохраняет пароль в файл | ||
| + | |||
| + | /root/.pass_<логин пользователя, пароль которого сохраняется> | ||
| + | |||
| + | затем на этот файл устанавливаются права "только чтение для хозяина (хозяин root)" | ||
| + | |||
| + | 0400 | ||
| + | |||
| + | На этапе pam session выполняется скрипт | ||
| + | |||
| + | /opt/pam_exec_hook_session | ||
| + | |||
| + | , который достаёт пароль из файла | ||
| + | |||
| + | /root/.pass_<логин пользователя, пароль которого сохраняется> | ||
| + | |||
| + | , сразу же удаляет этот файл, затем запускает пользовательский сценарий, например, вызывая сервис интеграции. | ||
| − | Пример сервиса интеграции с zimbra описан [[Zimbra#.D0.98.D0.BD.D1.82.D0.B5.D0.B3.D1.80.D0.B0.D1.86.D0.B8.D1.8F здесь]] | + | Пример сервиса интеграции с zimbra описан [[Zimbra#.D0.98.D0.BD.D1.82.D0.B5.D0.B3.D1.80.D0.B0.D1.86.D0.B8.D1.8F | здесь]] |
Текущая версия на 21:37, 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_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 описан здесь