web-dev-qa-db-fra.com

Comment trouver toutes les façons dont un compte utilisateur Unix est verrouillé

Je me retrouve parfois dans une situation où un système sous-entretenu a un compte qui a été verrouillé. Le problème est qu'il existe plusieurs façons de verrouiller un compte, chacune avec sa propre méthode de déverrouillage.

Ce n'est pas que le compte est verrouillé de manière incorrecte, juste de manière inattendue, mais trouver le bon verrou à réinitialiser est difficile.

Mon attaque la plus récente de ce problème était sur un système SUSE, et il s'est avéré que le mot de passe avait expiré (ce qui n'était pas connu initialement parce que les tentatives de connexion n'étaient pas via un système qui fournissait ce genre de commentaires), puis également verrouillé en raison d'échecs de tentatives de connexion.

Existe-t-il une liste de tous les différents verrous de compte possibles et comment les désactiver? J'ai l'intention que les bris réels, tels que les problèmes d'accès au répertoire personnel, les bibliothèques PAM corrompues, etc., soient hors de portée pour cette question.

12
wfaulk

Vous pouvez utiliser passwd pour recueillir des informations, par exemple si un compte est verrouillé

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)

L'utilitaire chage fournira des informations sur les différents temporisateurs d'un compte, par exemple pour un mot de passe non expiré

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

pour un mot de passe expiré

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

Les utilitaires passwd et chage répertorient également de nombreux verrous de compte.

Vous pouvez utiliser getent pour extraire les informations directement de la base de données appropriée pour examen

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
13
user9517

En général: non.

La réponse d'Iain est un bon résumé de la façon d'interroger les systèmes de vieillissement des mots de passe, mais a raté toutes sortes de choses. Par exemple:

  • Quelqu'un essayant de se connecter via ssh pourrait être interdit par des directives dans la configuration sshd.
  • Un système peut être configuré pour autoriser uniquement les membres d'un certain netgroup à se connecter.
  • La configuration locale PAM peut nécessiter une appartenance explicite à un groupe pour se connecter, ou peut uniquement autoriser une liste particulière d'utilisateurs.
  • Ce qui ressemble à un compte verrouillé peut s'avérer être un problème d'accès au répertoire personnel.
  • Quelqu'un a peut-être créé /etc/nologin, qui pour certaines applications (par exemple, ssh) verrouillera tous les utilisateurs.

En d'autres termes, il existe de nombreuses façons de verrouiller un compte qui n'ont rien à voir avec le fichier passwd. Le mieux est de vérifier /var/log/secure ou l'analogue local approprié à la distribution.

7
larsks

En plus de ce qui précède, passwdchage et getent, il y a aussi pam_tally2

Si le nombre de tentatives de connexion infructueuses est supérieur à la limite autorisée (qui est définie dans /etc/pam.d/password-auth), vous devrez faire pam_tally2 --user=foo --reset avant de pouvoir se reconnecter.

1
Jistanidiot

Le script suivant vous donnera une brève description de tous les utilisateurs et de leur statut (verrouillé ou non)

cat /etc/passwd | cut -d : -f 1 | awk '{ system("passwd -S " $0) }'
0
Arun Krishnan