Como encontrar todas as maneiras em que uma conta de usuário Unix é bloqueada

10

Ocasionalmente, me encontro em uma situação em que um sistema com pouca manutenção tem uma conta bloqueada. O problema é que há uma variedade de 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 indevidamente, apenas inesperadamente, mas encontrar o bloqueio correto para redefinir é difícil.

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

Existe uma lista de todos os diferentes bloqueios de conta possíveis e como desativá-los? Eu estou pretendendo quebrar real, tais como problemas de acesso ao diretório de origem, corrupto bibliotecas PAM, etc, estar fora do escopo para esta questão.

    
por wfaulk 07.03.2013 / 21:34

4 respostas

11

Você pode usar passwd para 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 utilitário chage fornecerá informações sobre os vários timers 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 passwd e chage também listam muitos dos bloqueios de conta.

Você pode usar getent para extrair as informações diretamente do banco de dados relevante para análise

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
    
por 07.03.2013 / 21:53
6

Em geral: não.

A resposta de Iain é um bom resumo de como consultar os sistemas que estão envelhecendo senhas, mas perdeu todos os tipos de coisas. Por exemplo:

  • Alguém tentando efetuar login via ssh pode ser proibido por diretivas na configuração sshd .
  • Um sistema pode ser configurado para permitir apenas que membros de um determinado netgroup efetuem login.
  • A configuração local PAM pode exigir a participação explícita do grupo para efetuar 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 , que para alguns aplicativos (por exemplo, ssh ) bloqueará todos os usuários.

Em outras palavras, há várias maneiras de bloquear uma conta que não tem nada a ver com o arquivo passwd . Sua melhor aposta é verificar /var/log/secure ou o análogo local adequado à distribuição.

    
por 07.03.2013 / 22:00
0

Além dos itens acima, passwd chage e getent , também há pam_tally2

Se o número de tentativas de login com falha estiver acima do limite permitido (que está definido em /etc/pam.d/password-auth), será necessário fazer pam_tally2 --user=foo --reset antes que eles possam fazer login novamente.

    
por 28.09.2016 / 16:16
0

O script a seguir fornece uma breve descrição de todos os usuários e seu status (bloqueado ou não)

cat /etc/passwd | cut -d : -f 1 | awk '{ system("passwd -S " $0) }'
    
por 09.02.2017 / 07:28