Fiquei um pouco surpreso pelo fato de um usuário ainda poder ter acesso ssh a uma máquina Linux (Ubuntu 18.04.6 LTS) cuja conta expirou.
Configurei a data de expiração da conta com chage
:
sudo chage -l xxxx
Last password change : Oct 10, 2024
Password expires : never
Password inactive : never
Account expires : Nov 05, 2024
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7
A conta expirou em 2024-11-05, mas o usuário ainda pode acessar ela por SSH.
Existe alguma configuração no servidor sshd ou PAM para impor a expiração da conta?
Até onde sei, o sshd tem UsePAM yes
um PAM que deve impedir o login, mas a única coisa que ele faz é imprimir um Your account has expired; please contact your system administrator
no banner ssh.
Eu recebo a mesma coisa se eu fizer sudo su xxxx
, eu recebo um Your account has expired; please contact your system administrator
mas recebo o prompt do shell de qualquer maneira.
O PAM é um sistema modular; ele depende inteiramente da configuração
/etc/pam.d/
para definir quais módulos são chamados e como seus resultados são considerados no resultado geral da chamada do PAM.Por exemplo, cada módulo pode ser carregado como 'obrigatório', onde o código de erro retornado eventualmente tem um efeito no final, ou como 'requisitado', onde o código de erro é um retorno de falha imediato , ou como 'opcional', onde os erros daquele módulo são simplesmente ignorados, ou algumas outras opções (veja pam(8) e pam.conf(5) ).
A expiração de acordo com os dados /etc/shadow é manipulada
pam_unix.so
naaccount
seção (authorization) da configuração do PAM. Se você receber a mensagem "Account expired" do pam_unix, mas isso não interromper o processo, então parece que o módulo foi (acidentalmente ou não) definido comooptional
em vez de required.Quando sshd manipula uma conexão, ele usa módulos de
/etc/pam.d/sshd
; quando su é executado, ele usasu
ousu-l
. Eles geralmente incluem um comum/etc/pam.d/system-auth
ou similar. Passe por todas essas configurações até encontrar o módulo mal configurado e conserte-o para dizer 'required'.Observe que o mesmo módulo em seções diferentes executa tarefas diferentes:
passwd
comando.