Intereting Posts
Настройки Unicode RXVT и Xresources Как я могу использовать cron для отображения сообщений на экране через notify-send Несколько корневых опций в командной строке Linux Постоянная переменная среды для всех пользователей Как отключить устройство (аппаратное обеспечение) от использования драйвера hid-multitouch? Как изменить содержимое каталога без sudo? Как начать изменять исходный код Linux для создания пользовательской ОС? Неизвестная ошибка btrfs, раздел не будет монтироваться Различия между zypper up и zypper dup Проблемы с make и opencv Как монтировать `img`, созданный с / bin / dd на жестком диске? Можете ли вы законно продавать модифицированные версии дистрибутивов Linux? Как мне обе цензурировать команду от .bash_history, а также иметь возможность вернуться к ней со стрелкой вверх? В чем смысл числовой части страниц руководства? Не удается найти работу mysql на crouton, ubuntu exact

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

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

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

Для этого я использую следующий файл 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.

  • pam_conv (3)
  • pam_get_item (3)