Я настраиваю службу 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.