Não há stdout / stdin no palco do PAM. Você precisa chamar pam_conv(3) via pam_get_item(3) para executar i / o.
Bom exemplo em ben.akrin.com incluindo o exemplo de fonte C relevante.
O que eu gostaria de alcançar é um programa interativo que seja executado antes ou depois de solicitar ao usuário a senha, mas não manipulará o acesso ao computador, a menos que seja concluído com êxito. Para torná-lo um pouco mais compreensível, aqui está um exemplo:
Gostaria de ter acesso ao meu computador, primeiro escrevendo meu nome de usuário, depois minha senha e, depois disso, respondendo corretamente a uma pergunta matemática gerada aleatoriamente.
Para que isso funcione, eu uso o seguinte arquivo de autenticação do sistema:
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
O problema é que o programa chamado matemática não pode manipular entradas do usuário, pois ele lê automaticamente um EOF do PAM, que essencialmente o torna inútil. Eu também tentei a seguinte variante da linha questionável, caso em que lê a senha, que também não é o que eu quero:
auth optional pam_exec.so stdout expose_authtok /home/math
Não há stdout / stdin no palco do PAM. Você precisa chamar pam_conv(3) via pam_get_item(3) para executar i / o.
Bom exemplo em ben.akrin.com incluindo o exemplo de fonte C relevante.
Tags authentication login pam linux