Jak znaleźć wszystkie sposoby blokowania konta użytkownika w systemie Unix

12

Czasami znajduję się w sytuacji, w której w niezrównoważonym systemie jest zablokowane konto. Problem polega na tym, że istnieje wiele sposobów blokowania konta, każdy z własną metodą odblokowania.

Nie chodzi o to, że konto jest blokowane nieprawidłowo, po prostu nieoczekiwanie, ale znalezienie właściwej blokady do zresetowania jest trudne.

Mój ostatni atak tego problemu dotyczył systemu SUSE i okazało się, że hasło wygasło (co początkowo nie było znane, ponieważ próby logowania nie odbyły się przez system, który dostarczył tego rodzaju informacje zwrotne), a następnie również zablokowane z powodu nieudanych prób logowania.

Czy jest gdzieś lista wszystkich możliwych blokad kont i jak je wyłączyć? Zamierzam, aby rzeczywiste uszkodzenia, takie jak problemy z dostępem do katalogu domowego, uszkodzone biblioteki PAM itp., Były poza zakresem tego pytania.

wfaulk
źródło

Odpowiedzi:

13

Możesz użyć passwddo zebrania niektórych informacji, np. Jeśli konto jest zablokowane

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)

chageNarzędzie dostarczy informacji na temat różnych czasomierzy na rachunku np na niewygasłe hasło

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

dla wygasłego hasła

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

Te passwdi chagenarzędzia również wymienić wiele blokad kont.

Możesz użyć getentdo pobrania informacji bezpośrednio z odpowiedniej bazy danych do sprawdzenia

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
użytkownik9517
źródło
7

Ogólnie: nie.

Odpowiedź Iaina jest dobrym podsumowaniem tego, jak odpytywać systemy starzenia się haseł, ale pominęła wiele różnych rzeczy. Na przykład:

  • Ktoś próbuje zalogować się przez ssh może zostać zabroniony przez dyrektywy w sshdkonfiguracji.
  • System można skonfigurować tak, aby zezwalał tylko członkom określonej grupy sieci na logowanie.
  • PAMKonfiguracja lokalna może wymagać wyraźnego członkostwa w grupie, aby się zalogować, lub może zezwalać tylko na określoną listę użytkowników.
  • To, co wygląda na zablokowane konto, może okazać się problemami z dostępem do katalogu domowego.
  • Ktoś mógł utworzyć /etc/nologin, co w przypadku niektórych aplikacji (np. ssh) Zablokuje wszystkich użytkowników.

Innymi słowy, istnieje wiele sposobów na zablokowanie konta, które nie mają nic wspólnego z passwdplikiem. Najlepszym rozwiązaniem jest sprawdzenie /var/log/securelub lokalny analog odpowiedni do dystrybucji.

Larsks
źródło
Zamierzałem zadać pytanie, czy rzeczy nie zostały „zepsute” i czy użytkownik mógł się wcześniej zalogować. Oznacza to, że niektóre systemy działające poprawnie zablokowały konto. To są dobre punkty, ale zaktualizuję pytanie, aby było bardziej wyraźne.
wfaulk
1

Oprócz wyżej wymienionych, passwd chagei getentjest teżpam_tally2

Jeśli liczba nieudanych prób logowania przekroczy dopuszczalny limit (który jest ustawiony w /etc/pam.d/password-auth), musisz to zrobić, pam_tally2 --user=foo --resetzanim będą mogli się zalogować ponownie.

Jistanidiot
źródło
0

Poniższy skrypt da ci krótki opis wszystkich użytkowników i ich statusu (zablokowany lub nie)

cat /etc/passwd | cut -d : -f 1 | awk '{ system("passwd -S " $0) }'
Arun Krishnan
źródło
To sprawdza tylko jeden ze sposobów zablokowania konta.
wfaulk