Назад | Перейти на главную страницу

PAM: Как я могу создать службу, которая передает имя пользователя / пароль в сценарий?

Я настраиваю службу PAM для OpenVPN, чтобы модуль OpenVPN PAM мог аутентифицировать имя пользователя / пароль для внешней службы, которую я буду реализовывать с помощью сценария оболочки.

В модуле OpenVPN PAM содержится примерно следующая документация:

плагин openvpn-auth-pam.so "openvpn имя USERNAME пароль PASSWORD"

Хотя «ИМЯ ПОЛЬЗОВАТЕЛЯ» и «ПАРОЛЬ» являются специальными строками, которые заменяют значения, предоставленные клиентом, также можно указать буквенные значения для использования в качестве ответов на запросы модуля PAM. Например, предположим, что модуль входа в систему запросил третий параметр, «домен», на который нужно ответить постоянным значением «mydomain.com»:

Итак, теперь я создал конфигурацию PAM openvpn в /etc/pam.d/openvpn:

auth required pam_exec.so expose_authtok /tmp/outputenv

Это помогло мне выполнить скрипт и получить пароль от стандартного ввода, блестяще, я на 95% готов. Но у меня нет доступа к имени пользователя. Я проверил переменные среды и все, что могу придумать, но я не могу понять, как я могу передать ОБЕ имя пользователя И пароль в свой сценарий для внешней аутентификации.

Идеи?

Полный ответ на этот вопрос размещен здесь:

https://forums.openvpn.net/post13002.html#p13002

В основном пример в документации модуля PAM для openvpn вводит вас в заблуждение, он использует:

plugin openvpn-auth-pam.so "login login USERNAME password PASSWORD"

Но правильная конфигурация для openvpn server.config:

plugin /usr/local/openvpn/sbin/openvpn-auth-pam.so "openvpn"

Если вы включите дополнительные параметры, показанные в примере документации, он никогда не будет записывать PAM_USER в переменные среды, как ожидается на основе документации pam_exec.so.