Como adicionar etapas adicionais ao login?

8

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
    
por FloriOn 04.08.2015 / 18:45

1 resposta

7

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.

por 04.08.2015 / 19:10