2

Мы используем PAM для аутентификации на сервере внешнего радиуса. У нас есть следующая строка в /etc/pam.d/common-auth

auth [success = 6 default = ignore] pam_exec.so expose_authtok /home/cliuser/radiusAuth.sh

PAM записывает пароль в stdin скрипта и предоставляет имя пользователя в качестве переменной среды.

Это работало до версии 1.1.1-6.1 модулей libpam. После обновления до 1.1.3-7.1 пароль становится пустым, когда я пытаюсь прочитать в сценарии. Мы используем open-ssh в качестве нашего ssh-сервера.

Спасибо прасант

2 ответа2

6

Короткий ответ

Я столкнулся с этой проблемой, и проблема заключалась в том, что в файле /etc /ssh /sshd_config была нарушена политика. Мое было то, что AllowUsers был установлен, и я пытался войти в систему как пользователь, который еще не существует в системе.

Более длинный ответ

Более длинный ответ заключается в том, что пароль был перезаписан. На самом деле это не было пустым. Так уж сложилось, что в первой строке был не отображаемый символ возврата (^ H) и новая строка. Команда чтения, которую я использовал, считывала только первую строку переменной. После использования cat на stdin полное содержимое (как показано vim with:set list) было

"^H$
^M^?INCORRECT^@"

Знак доллара, являющийся новой линией.

После некоторых копаний мы нашли это в исходном коде openssh

https://github.com/openssh/openssh-portable/blob/df56a8035d429b2184ee94aaa7e580c1ff67f73a/auth-pam.c#L1198

Который показывает, что пароль перезаписывается

https://github.com/openssh/openssh-portable/blob/df56a8035d429b2184ee94aaa7e580c1ff67f73a/auth-pam.c#L234

Который содержит символы, которые мы ожидали. Комментарии объясняют почему:

/*
 * If the user logging in is invalid, or is root but is not permitted
 * by PermitRootLogin, use an invalid password to prevent leaking
 * information via timing (eg if the PAM config has a delay on fail).
 */

Логика проверки, используемая для пометки authctxt-> valid как false, находится здесь https://github.com/openssh/openssh-portable/blob/df56a8035d429b2184ee94aaa7e580c1ff67f73a/auth.c#L98

В нем изложены все причины, по которым пользователь / пароль может быть неверным.

Изменить: я обновил ссылки, чтобы заблокировать для конкретного коммита, чтобы они оставались правильными. Хотя код изменился, поведение не изменилось.

0

Другая распространенная ошибка / неправильное представление - как получить пароль от pam, который передается на стандартный ввод. Самый простой способ, который я видел, это

PASS=`cat -`

, Более распространенный метод чтения из аргументов, таких как $ @, $ 1 и т.д., НЕ РАБОТАЕТ.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .