Como encontrar todas as maneiras pelas quais uma conta de usuário Unix está bloqueada

12

Ocasionalmente, encontro-me em uma situação em que um sistema sub-mantido tem uma conta bloqueada. O problema é que existem várias maneiras pelas quais uma conta pode ser bloqueada, cada uma com seu próprio método de desbloqueio.

Não é que a conta esteja sendo bloqueada incorretamente, apenas inesperadamente, mas é difícil encontrar o bloqueio correto para redefinir.

Meu ataque mais recente a esse problema foi em um sistema SUSE, e a senha expirou (o que não era conhecido inicialmente porque as tentativas de login não eram de um sistema que fornecia esse tipo de feedback) e também foi bloqueado. devido a falhas nas tentativas de login.

Existe uma lista em todos os diferentes bloqueios de conta possíveis e como desativá-los? Pretendo que falhas reais, como problemas de acesso ao diretório inicial, bibliotecas PAM corrompidas, etc., estejam fora do escopo desta pergunta.

wfaulk
fonte

Respostas:

13

Você pode usar passwdpara coletar algumas informações, por exemplo, se uma conta estiver bloqueada

passwd -S user
user LK 2012-11-06 0 99999 7 -1 (Password locked.) (CentOS)
user L 01/22/2013 0 99999 7 -1 (Ubuntu)

O chageutilitário fornecerá informações sobre os vários cronômetros em uma conta, por exemplo, para uma senha não expirada

chage -l user
Last password change                                    : Nov 12, 2012
Password expires                                        : never
Password inactive                                       : never
Account expires                                         : never
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

para uma senha expirada

chage -l user
Last password change                                    : password must be changed
Password expires                                        : password must be changed
Password inactive                                       : password must be changed
Account expires                                         : never
Minimum number of days between password change          : 0
Maximum number of days between password change          : 22
Number of days of warning before password expires       : 33

Os utilitários passwde chagetambém listam muitos dos bloqueios de conta.

Você pode usar getentpara extrair as informações diretamente do banco de dados relevante para exame

getent passwd user
user:x:505:505::/home/passtest:/sbin/nologin  <-- denied login
getent shadow user
user:!!:0:0:22:33:44::   <-- this is locked
user9517
fonte
7

Em geral: não.

A resposta de Iain é um bom resumo de como consultar os sistemas de envelhecimento de senhas, mas perdeu todo tipo de coisa. Por exemplo:

  • Alguém tentando fazer login via ssh pode ser proibido por diretivas na sshdconfiguração.
  • Um sistema pode ser configurado para permitir apenas membros de um determinado grupo de rede.
  • A PAMconfiguração local pode exigir que a associação explícita do grupo efetue login ou pode permitir apenas uma lista específica de usuários.
  • O que parece ser uma conta bloqueada pode se tornar um problema de acesso ao diretório inicial.
  • Alguém pode ter criado /etc/nologin, o que para alguns aplicativos (por exemplo, ssh) bloqueará todos os usuários.

Em outras palavras, existem muitas maneiras de bloquear uma conta que nada têm a ver com o passwdarquivo. Sua melhor aposta é verificar /var/log/secureou o analógico local apropriado para a distribuição.

larsks
fonte
Minha intenção era supor que as coisas não estavam "quebradas" e que o usuário já havia conseguido fazer login antes. Ou seja, que algum sistema funcionando corretamente bloqueou a conta. Esses são bons pontos, mas atualizarei a questão para ser um pouco mais explícita.
wfaulk
1

Além do mencionado, passwd chagee getenttambém hápam_tally2

Se o número de tentativas falhas de login estiver acima do limite permitido (definido em /etc/pam.d/password-auth), você precisará fazer isso pam_tally2 --user=foo --resetantes que eles possam fazer login novamente.

Jistanidiot
fonte
0

O script a seguir forneceria uma breve descrição de todos os usuários e seus status (bloqueados ou não)

cat /etc/passwd | cut -d : -f 1 | awk '{ system("passwd -S " $0) }'
Arun Krishnan
fonte
Isso verifica apenas uma das maneiras pelas quais uma conta pode ser bloqueada.
wfaulk