Как добавить дополнительные шаги для входа?

8

Чего я хотел бы добиться, так это интерактивной программы, которая запускается до или после запроса у пользователя пароля, но не будет обрабатывать доступ к компьютеру, если он не завершится успешно. Чтобы сделать это несколько более понятным, вот пример:

Я хотел бы получить доступ к своему компьютеру, сначала написав свое имя пользователя, затем мой пароль, и после этого правильно ответив на простой случайно сгенерированный математический вопрос.

Чтобы это работало, я использую следующий файл 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
FloriOn
источник
2
Похоже, вы захотите закодировать свой собственный модуль PAM, подробнее в руководстве PAM. linux-pam.org/Linux-PAM-html/Linux-PAM_MWG.html
Драв Слоан,

Ответы:

7

На стадии PAM нет stdout / stdin. Вам нужно позвонить pam_conv(3)через, pam_get_item(3)чтобы выполнить ввод / вывод.

Хороший пример на ben.akrin.com, включая соответствующий пример источника C.

Стив
источник