Чего я хотел бы добиться, так это интерактивной программы, которая запускается до или после запроса у пользователя пароля, но не будет обрабатывать доступ к компьютеру, если он не завершится успешно. Чтобы сделать это несколько более понятным, вот пример:
Я хотел бы получить доступ к своему компьютеру, сначала написав свое имя пользователя, затем мой пароль, и после этого правильно ответив на простой случайно сгенерированный математический вопрос.
Чтобы это работало, я использую следующий файл 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
источник
Ответы:
На стадии PAM нет stdout / stdin. Вам нужно позвонить
pam_conv(3)
через,pam_get_item(3)
чтобы выполнить ввод / вывод.Хороший пример на ben.akrin.com, включая соответствующий пример источника C.
источник