Bloqueia a autenticação do RSA quando a senha é expirada

5

Estou configurando um servidor FreeIPA no CentOS 7 e quero bloquear a autenticação RSA por SSH quando a senha expirar. Por padrão, quando eu expiro a senha do usuário e eles fazem login, eles são forçados a alterar sua senha. Mas, se esse mesmo usuário também estiver usando a autenticação RSA, o servidor os permitirá entrar e não forçá-los a alterar sua senha. Eu pesquisei tópicos relacionados a FreeIPA, PAM e SSH e não consigo encontrar a resposta que estou procurando.

Existe alguma maneira de bloquear a autenticação da chave RSA por SSH quando a senha do usuário expirou?

    
por sKr0d 28.02.2016 / 23:35

3 respostas

0

Você provavelmente poderia criar um script usando chage ou usermod, por exemplo: usermod --expiredate ... Se eu precisasse, usaria um script de shell semelhante ao seguinte pseudocódigo:

if 'chage -l user_account_you_want_expired_etc | awk '/expires/{print "relevant fields}'' >= expiration
then
usermod -s /sbin/nologin USERNAME
fi

Algo nesse sentido (lembre-se que você não está trabalhando, mas algo para lhe dar uma estrutura. "Se a expiração (grep'd do awk) for maior ou igual ao que eu quero / preciso, mude a casca para nologina. "

    
por 29.02.2016 / 01:51
0

Se você estiver usando o PAM para criar uma sessão para seus usuários ( usePAM yes ), ele não permitirá que o usuário efetue login com senhas expiradas.

Está bem descrito em Unix (ok, é o problema invertido, mas pode ser útil para você).

    
por 29.02.2016 / 09:40
0

Se você tiver inscrito o cliente no FreeIPA, sua pilha PAM será configurada para usar o daemon SSSD. O módulo PAM em questão é o pam_sss, que fala com o daemon SSSD para executar a verificação. O SSSD sabe sobre os atributos do IPA e deve negar a sessão quando o usuário está bloqueado.

# ipa user-disable abbra
-----------------------------
Disabled user account "abbra"
-----------------------------
# grep UsePAM /etc/ssh/sshd_config
UsePAM yes
# journalctl -u sshd -f
 .....
Feb 29 17:21:23 a.example.com systemd[1]: Started OpenSSH server daemon.
Feb 29 17:21:33 a.example.com sshd[20209]: pam_sss(sshd:account): system info: [The user account is locked on the server]
Feb 29 17:21:33 a.example.com sshd[20209]: pam_sss(sshd:account): Access denied for user abbra: 6 (Permission denied)
Feb 29 17:21:33 a.example.com sshd[20209]: fatal: Access denied for user abbra by PAM account configuration [preauth]

Para o usuário habilitado, você teria algo como:

# ipa user-enable abbra
----------------------------
Enabled user account "abbra"
----------------------------
# journalctl -u sshd -f
 ....
Feb 29 18:03:27 a.example.com sshd[22302]: Accepted publickey for abbra from X.Y.Z.W port 54540 ssh2: KEY...

Quando a senha é marcada como expirada (configurando-a por outro usuário, por exemplo, admin ou aplicando uma determinada política de senha), o SSSD ignora o fato de que a senha precisa de uma alteração porque neste momento ela só executa uma fase da conta as senhas não são verificadas.

Costumava haver um número de pedidos para adicionar essa lógica no passado, com um dos argumentos contra ela era o fato de que, se você está usando um tipo de autenticação (chave pública), por que o status da conta deve ser baseado no estado de outro tipo de autenticação. Existe uma lógica, mas talvez seja bom adicionar uma política de senha que permita que a lógica acople o estado da conta com o estado da senha.

Se você estiver interessado em ter essa política de senhas, recomendamos que você abra um tíquete para o FreeIPA para solicitá-la, com uma explicação do seu caso de uso.

    
por 29.02.2016 / 18:21