pam_faillock e AD / CentOS 7.2

2

Portanto, eu tenho um sistema CentOS 7.2 e usei o realmd para ingressar no domínio do AD. Eu posso fazer um # id {username} @ {domain} que lista perfeitamente todas as informações do AD para esse usuário. Impressionante!

Usando arquivos stock pam.d / system-auth e pam.d / password-auth, posso fazer ssh e fazer o login como um usuário do AD.

Mas, quando tento usar um system-auth e password-auth endurecido, as coisas ficam malucas. Eu limpei o arquivo password-auth e, especificamente, a seção pam_faillock auth.

Aqui está o que eu tenho para /etc/pam.d/password-auth

auth        required      pam_env.so
auth        [default=1 success=ok] pam_localuser.so debug
auth required pam_faillock.so preauth audit deny=5 unlock_time=900 
auth        sufficient pam_unix.so nullok try_first_pass audit
auth [default=die] pam_faillock.so authfail audit deny=5 unlock_time=900 
auth sufficient pam_faillock.so authsucc audit deny=5 unlock_time=900
auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success
auth        sufficient    pam_sss.so forward_pass
auth        required      pam_deny.so

account     required      pam_unix.so
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 1000 quiet
account     [default=bad success=ok user_unknown=ignore] pam_sss.so
account     required      pam_permit.so

password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password    sufficient    pam_sss.so use_authtok
password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
-session     optional      pam_systemd.so
session     optional      pam_oddjob_mkhomedir.so umask=0077
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so
session     optional      pam_sss.so

Ao tentar autenticar, no console ou no ssh, recebo o seguinte:

Oct 07 12:07:48 vmcentos72 sshd[8406]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=localhost  user=user@domain

Se eu remover as linhas pam_faillock na seção auth, tudo funcionará bem.

Aqui está o system-auth:

auth        required      pam_env.so
auth        [default=1 success=ok] pam_localuser.so
auth required pam_faillock.so preauth audit silent deny=5 unlock_time=900
auth        [success=done ignore=ignore default=die] pam_unix.so nullok try_first_pass
auth [default=die] pam_faillock.so authfail audit deny=5 unlock_time=900
auth sufficient pam_faillock.so authsucc audit deny=5 unlock_time=900
auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success
auth        sufficient    pam_sss.so forward_pass
auth        required      pam_deny.so

account     required      pam_unix.so
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 1000 quiet
account     [default=bad success=ok user_unknown=ignore] pam_sss.so
account     required      pam_permit.so

password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password    sufficient    pam_sss.so use_authtok
password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
-session     optional      pam_systemd.so
session     optional      pam_oddjob_mkhomedir.so umask=0077
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so
session     optional      pam_sss.so

Alguma sugestão para fazer isso funcionar? Se apenas pam_faillock tivesse uma opção de depuração: (

    
por skinsbrew 07.10.2016 / 18:16

1 resposta

2

Seu problema é que você não ajustou a pilha PAM adequadamente, especificamente as contagens "skip" nas linhas usando a notação de colchetes. Se você não está familiarizado com essa notação, o RTFM pam.conf (5) , que também lista os equivalentes de notação de colchetes de "required", suficiente ", etc.

A seção de autenticação padrão do RHEL 7 com o sssd configurado é assim:

auth        required      pam_env.so
auth        [default=1 success=ok] pam_localuser.so
auth        [success=done ignore=ignore default=die] pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success
auth        sufficient    pam_sss.so forward_pass
auth        required      pam_deny.so

A linha pam_localuser diz que a ação padrão é pular um módulo ( pam_unix neste caso), mas em caso de sucesso (ou seja, o usuário é local), prossiga normalmente. Isso é feito para que os usuários de domínio (não locais) não gerem uma tentativa de login com falha com pam_unix , mas passem diretamente para sssd ( pam_sss , com uma verificação de uid > = 1000 de antemão).

Observe também a configuração default = die em pam_unix , o que significa que um login local com falha irá abortar a pilha de autenticação ali mesmo (e nem mesmo tentar pam_sss ). Da mesma forma, success = done faz o mesmo para logins bem-sucedidos.

Como já foi mencionado, pam_faillock não se aplica a usuários de domínio, mas se você estiver usando para contas locais e inserindo três chamadas em torno de pam_unix , será necessário alterar o pam_localuser linha para default = 4 , para que os logins de domínio continuem a funcionar. (Com o padrão = 1, ele ignorará pam_faillock , mas continuará com pam_unix , o que obviamente falhará nas contas de domínio e, por padrão, morrerá imediatamente. A definição padrão = 4 irá pular para pam_succeed_if , já que anteriormente fez.)

Eu não estou familiarizado com pam_faillock , então não posso dizer se chamar novamente depois de pam_unix ser apropriado, mas se isso estiver correto, você também precisará fazer algo sobre o sucesso = concluído e padrão = morrer em pam_unix , senão nunca chegará a pam_faillock para bloquear / desbloquear contas.

Esta é uma pilha complexa de PAM; você pode consultar as configurações de exemplo em pam_faillock (8) . Certifique-se de não deixar todo mundo acidentalmente entrar (esperançosamente, o pam_deny no final cuida disso), e certifique-se de ajustar qualquer contagem padrão = N ao adicionar ou remover linhas subseqüentes.

TL; DR: [default=1] significa saltar uma linha depois ( pam_unix neste caso). Adicionar linhas requer o ajuste da contagem.

    
por 16.06.2017 / 00:00