То, что я хотел бы достичь, – это интерактивная программа, которая запускается до или после запроса пользователя для пароля, но не будет обрабатывать доступ к компьютеру, если он не завершится с успехом. Чтобы сделать это несколько понятным, вот пример:
Я хотел бы получить доступ к своему компьютеру, сначала написав свое имя пользователя, потом пароль и после этого правильно ответив на простой случайный математический вопрос.
Для этого я использую следующий файл system-auth:
auth required pam_unix.so try_first_pass nullok nodelay auth optional pam_faildelay.so delay=600000 auth optional pam_exec.so stdout /home/math auth optional pam_permit.so auth required pam_env.so
Проблема в том, что программа с именем math не может обрабатывать входные данные от пользователя, поскольку она автоматически считывает EOF из PAM, что по существу делает ее бесполезной. Я также попробовал следующий вариант сомнительной строки, в этом случае он читает в пароле, что тоже не то, что я хочу:
auth optional pam_exec.so stdout expose_authtok /home/math
Нет stdout / stdin на этапе PAM. Вам нужно вызвать pam_conv(3)
через pam_get_item(3)
для выполнения pam_get_item(3)
.
Хороший пример на ben.akrin.com, включая соответствующий пример источника C.