Bem, minhas premissas sobre o funcionamento do PAM estavam certas.
O módulo pam_sss.so
esperava que o argumento forward_pass
transmitisse a senha para outros módulos PAM, como o módulo pam_unix.so
. Então, basta colocar essa opção para fazer o trabalho. A linha resultante foi:
auth sufficient /usr/local/lib/pam_sss.so forward_pass
Que terminou em outro problema. Se sssd ou mesmo o domínio de autenticação do sssd estiver inativo, você não conseguirá efetuar o login, pois o módulo pam_sss.so
não funcionará e, conseqüentemente, a senha não será encaminhada.
Então a escolha óbvia foi colocar pam_unix.so
antes de pam_sss.so
e deixar tudo "suficiente" com um pam_deny.so
no final. Essa é a maneira do Linux de resolver problemas, mas isso não parece funcionar no FreeBSD.
Depois de algumas pesquisas nas listas de discussão, a maneira correta de fazer isso no FreeBSD é usar a estranha ordem no PAM:
auth sufficient pam_opie.so no_warn no_fake_prompts
auth requisite pam_opieaccess.so no_warn allow_local
auth sufficient pam_unix.so no_warn
auth sufficient /usr/local/lib/pam_sss.so use_first_pass
auth required pam_unix.so no_warn use_first_pass
Portanto, colocar pam_unix.so
duas vezes no PAM, o primeiro como sufficient
e o último como required
. Eu não sei porque isso acontece, mas está funcionando e parece ser o caminho certo para fazer.