Não estou familiarizado com a implementação de pam_exec.so
, mas fiz um pequeno PAM e acho complicado qualquer módulo lidar com sessões interativas com um script de terceiros devido à maneira como a conversa do PAM funciona ( pam_conv_*
funções) e a necessidade de saber quando o script de terceiro estaria lendo stdin
ou não (já que o script não é simplesmente exec
pelo módulo em primeiro plano).
Dependendo da quantidade de esforço que alguém está disposto a ir, construir um PAM não é complicado e você tem exemplos fáceis de ler em python ou golang
Outra opção (talvez mais rápida) é usar a opção stdin
em pam_exec.so
.
Segurança à parte, e dependendo do seu caso de uso, isso pode ser suficiente, pois envia a senha para o script stdin.
Se a entrada de script concatenada com senha for uma opção para você (como algumas implementações 2FA nas quais você insere senha + OTP no campo de senha):
- Adicione a opção
stdin
à sua linhapam_exec.so
- No seu script, divida a senha da sua segunda entrada
- Manipule a autenticação de senha em si (como
pam_unix
não conseguirá fazer isso com a entrada extra) - Faça uso de sua entrada extra