Compreendendo o procedimento de autenticação do PAM no FreeBSD com segurança / sssd

4

Estou tentando entender o que está se comportando erroneamente na minha configuração do PAM no FreeBSD 10.0

A máquina é configurada com dois domínios de autenticação diferentes, um é a autenticação Unix padrão e o outro usa o Daemon de Serviços de Segurança do Sistema (sssd).

Neste momento, estou usando essa configuração em /etc/pam.d/sshd , pois só quero permitir logins sssd de ssh.

auth            sufficient      pam_opie.so                  no_warn no_fake_prompts
auth            requisite       pam_opieaccess.so            no_warn allow_local
auth            sufficient      /usr/local/lib/pam_sss.so
#auth           sufficient      pam_krb5.so                  no_warn try_first_pass
#auth           sufficient      pam_ssh.so                   no_warn try_first_pass
auth            required        pam_unix.so                  no_warn use_first_pass

# account
account         required        pam_nologin.so
#account        required        pam_krb5.so
account         required        pam_login_access.so
account         required        /usr/local/lib/pam_sss.so    ignore_unknown_user
account         required        pam_unix.so

# session
#session        optional        pam_ssh.so                   want_agent
session         optional        /usr/local/lib/pam_sss.so
session         optional        /usr/local/lib/pam_mkhomedir.so      mode=0700
session         required        pam_permit.so

# password
password        sufficient      /usr/local/lib/pam_sss.so    use_authtok
#password       sufficient      pam_krb5.so                  no_warn try_first_pass
password        required        pam_unix.so                  no_warn try_first_pass

Se eu entendi corretamente, quando um usuário sssd faz o login na máquina, ele atingirá a linha auth sufficient /usr/local/lib/pam_sss.so e, como isso é sufficient , ele fará o login sem problemas. Quando uma conta de usuário local tenta fazer o login, ela falhará na verificação sssd, mas terá sucesso em pam_unix.so usando a senha digitada pela primeira vez, sem solicitar a senha novamente.

Mas não é o que está acontecendo. Para fazer login com êxito como uma conta local, devo remover use_first_pass de pam_unix.so optiions em auth realm e quando o usuário fizer login, o sistema primeiro solicita a conta sssd, falhando, pois os usuários locais não existem na autenticação externa serviço. Em seguida, o sistema pede novamente a mesma senha, mas autentica no módulo pam_unix.so . E finalmente o acesso é concedido.

Como exemplo, ele se comporta dessa maneira:

ssh sssd-test.example.com -l local-user-account
Password: 
Password for [email protected]:
Last login: Sat May 24 16:22:40 2014 from 192.168.1.100
FreeBSD 10.0-RELEASE-p1 (GENERIC) #0: Tue Apr  8 06:45:06 UTC 2014

Welcome to FreeBSD!

$

Não sei exatamente por que isso acontece ou se tem algo a ver com a sessão account . Quanto ao meu entendimento sobre o PAM, a configuração deve estar certa.

Agradecemos antecipadamente

    
por Vinícius Ferrão 24.05.2014 / 21:37

1 resposta

4

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.

    
por 25.05.2014 / 00:25