Limitarea încercărilor de parolă în Linux Nu este doar o ciudățenie a administratorilor paranoici; este una dintre cele mai eficiente măsuri pentru a opri atacurile de tip forță brută și accesul neautorizat, atât în mediile desktop, cât și în cele de tip server. Dacă computerul dvs. conține informații sensibile sau se conectează la internet, veți dori să securizați această parte a sistemului. auditați rețeaua locală.
Pe lângă setarea unei parole puternice, configurați blocări temporare sau permanente după mai multe eșecuri Acest aspect este esențial: încetinește atacatorii, generează mai multe jurnale pentru auditare și permite combinarea acestei protecții cu alte politici de parolă (expirare, complexitate, reutilizare etc.). Să analizăm, cu calm, dar în detaliu, cum se face acest lucru în diferite distribuții și la diferite niveluri ale sistemului.
Blocarea contului din cauza încercărilor eșuate de conectare pe Red Hat, CentOS și derivate
În distribuții bazat pe Red Hat (RHEL, CentOS, Rocky, AlmaLinux…)Blocarea contului din cauza încercărilor eșuate este gestionată cu modulul PAM pam_faillockAcest modul controlează câte încercări eșuate de autentificare sunt permise, cât timp este blocat contul și ce utilizatori sunt afectați (inclusiv, dacă doriți, utilizatorul root).
Pentru a aplica această politică, trebuie să editați fișierele PAM globale, în mod normal /etc/pam.d/system-auth și, în unele versiuni, de asemenea /etc/pam.d/password-authAceste fișiere servesc drept șabloane pentru majoritatea serviciilor de autentificare din sistem (autentificare în consolă, sudo, SSH etc.).
Aceste fișiere conțin linii similare cu acestea, în secțiunea auth y cont:
auth required pam_faillock.so preauth silent audit deny=2 unlock_time=120
auth pam_faillock.so authfail audit deny=2 unlock_time=120
account required pam_faillock.so
Prima linie acționează înainte de autentificarea reală (preautentificare)Al doilea rulează atunci când autentificarea eșuează, iar al treilea este responsabil pentru verificarea stării de blocare a contului în timpul fazei de contPrin modificarea parametrilor, puteți ajusta politica în funcție de nevoile dumneavoastră.
Cei mai comuni parametri ai pam_faillock sunet:
- de auditPermite înregistrarea detaliată a încercărilor de conectare, astfel încât să rămână urme în jurnalele de sistem (de exemplu, în / var / log / secure).
- refuză=2Aceasta setează numărul maxim de încercări eșuate de introducere a parolei înainte ca contul să fie blocat. În acest exemplu este 2, dar îl puteți mări (3, 5, 10…).
- deblocare_timp=120: indică timpul de blocare în secunde. Aici ar fi 120 de secunde (2 minute) până când contul este reactivat automat.
- tăcutDacă este prezent, Nu îi arată utilizatorului că a fost blocatPur și simplu oprește acceptarea autentificărilor, făcând sistemul mai puțin „verbos” pentru un atacator.
Un detaliu important este că, în mod implicit, rădăcina este exclusă din acest blocDacă doriți să se aplice aceleași reguli și la aceasta, trebuie să adăugați parametrul even_deny_root în liniile pam_faillock ale secțiunii auth. Acest lucru întărește securitatea, dar ar trebui să evaluați riscul de a pierde accesul dacă faceți prea multe greșeli.
Când un cont este blocat și nu utilizați parametrul tăcutSistemul poate afișa mesaje explicite care avertizează că utilizatorul a depășit numărul permis de încercări. Acest lucru este util în mediile de testare pentru a verifica configurația, deși în producție este de obicei cel mai bine să nu se furnizeze prea multe informații.
Pentru a vizualiza încercările de conectare eșuate ale unui anumit utilizator, pe sistemele Red Hat puteți utiliza comanda blocare de eroare indicând contul care vă interesează:
faillock --user lionel
Această comandă arată Câte încercări eșuate a acumulat utilizatorul?, inclusiv adresa IP utilizată în cazul SSH și alte detalii relevante pentru audit. În plus, puteți oricând să verificați ce apare în / var / log / secureunde vor fi înregistrate aceste evenimente de securitate.

Blocarea contului din cauza încercărilor eșuate de conectare în Debian și Ubuntu
În cazul Debian, Ubuntu și derivateLogica este similară, dar modulul PAM utilizat se schimbă. În mod tradițional, acesta a fost folosit pam_tally2 pentru a număra încercările eșuate și a bloca automat conturile, deși în versiunile moderne se recomandă migrarea la pam_faillockChiar și așa, pam_tally2 este încă foarte prezent în multe ghiduri și medii.
Pentru a aplica o blocare bazată pe numărul de încercări eșuate în Debian tipic, de obicei editați fișierul /etc/pam.d/common-authcare definește politica standard de autentificare pentru majoritatea serviciilor locale. Puteți adăuga o linie ca aceasta:
auth required pam_tally2.so onerr=fail deny=3 unlock_time=120 audit even_deny_root root_unlock_time=600
Cu această configurație, sistemul Contul este blocat după 3 încercări eșuate.Menține blocarea timp de 120 de secunde pentru utilizatorii normali și timp de 600 de secunde pentru root. În plus, dacă apare vreo eroare cu modulul (onerr=eșuat), din motive de securitate, accesul este refuzat în loc să fie permis.
Principalii parametri ai pam_tally2 sunet:
- onerr=eșuatDacă există o problemă la citirea sau actualizarea contorului de încercări, autentificarea este refuzată pentru a evita lăsarea accidentală a unei uși deschise.
- refuză=3Numărul maxim de încercări eșuate permise înainte ca contul să fie blocat. O valoare de 3 este de obicei destul de rezonabilă în practică.
- deblocare_timp=120: timpul în secunde în care contul va rămâne blocat pentru utilizatorii standard.
- de audit: înregistrează informații despre eșecul de autentificare (în Debian, de obicei este /var/log/auth.log).
- even_deny_root: forțează ca rădăcina să fie luată în considerare și în acest sistem de blocare, lucru care ar trebui utilizat cu precauție.
- timp_deblocare_root=600: timpul specific de blocare pentru contul de root, în secunde, independent de ceilalți utilizatori.
Când blocarea este activată, utilizatorul va vedea un mesaj care indică faptul că contul său a fost dezactivat temporar din cauza prea multor încercări de conectare eșuate. Acest lucru permite administratorului să detecteze comportamente suspecte și avertizează utilizatorul că ceva este în neregulă.
Pentru a vizualiza încercările eșuate înregistrate de pam_tally2 Pentru un anumit utilizator (de exemplu, lionel), puteți utiliza:
pam_tally2 -u lionel
Această comandă arată numărul de eșecuri acumulate Și vă permite să resetați manual contorul, dacă este necesar, cu opțiuni suplimentare. În plus, la fel ca în Red Hat, aveți întotdeauna opțiunea de a revizui /var/log/auth.log pentru a vedea mai detaliat ce s-a întâmplat la fiecare încercare de autentificare.
Limitați încercările SSH cu MaxAuthTries
Unul dintre cele mai comune puncte de intrare în serverele Linux este SSHDe aceea este esențial să controlăm câte încercări de autentificare sunt permise per conexiune. Aici intervine politica. MaxAuthTries, care este configurat în fișierul / Etc / ssh / sshd_config de pe serverul OpenSSH.
Ideea este simplă: MaxAuthTries definește numărul maxim de încercări de autentificare permise per conexiune SSHDacă această limită este depășită, serverul întrerupe conexiunea, forțând atacatorul să înceapă o nouă sesiune pentru a continua să încerce combinații, ceea ce încetinește semnificativ atacurile automate de tip brute-force.
Pentru a-l configura, editați pur și simplu fișierul de configurare:
sudo nano /etc/ssh/sshd_config
Apoi, localizați sau adăugați o linie ca aceasta:
MaxAuthTries 3
Cu această valoare, Sunt permise doar trei încercări de autentificare per conexiune SSH.Dacă utilizatorul face aceeași greșeală de mai multe ori, daemonul sshd îl deconectează. Pentru ca modificarea să aibă efect, serviciul trebuie reîncărcat sau repornit, de exemplu cu:
sudo systemctl restart sshd
MaxAuthTries nu înlocuiește modulele PAM precum pam_tally2 sau pam_faillock, ci mai degrabă funcționează în paralelServerul SSH controlează câte încercări consecutive sunt permise într-o singură sesiune, în timp ce PAM păstrează un număr global per utilizator și poate bloca contul acestuia la nivel de sistem.
Pe lângă MaxAuthTries, este recomandabil să combinați și alte măsuri de securitate SSH pentru a face serviciul mult mai robust:
- Schimbați portul implicitNu mai folosiți portul 22 și mutați SSH pe un port mai puțin evident, ceea ce ajută la filtrarea multor scanări automate de bază.
- Folosește chei publice în loc de paroleAutentificarea folosind chei SSH elimină problema parolelor slabe și este mult mai robustă împotriva atacurilor de tip brute-force.
- Restricționați sursele folosind un firewall sau configurați o DMZPermiterea SSH doar de la anumite adrese IP sau intervale de rețea adaugă o barieră foarte eficientă la nivel de rețea.
Limitați încercările de autentificare locală cu PAM
Dincolo de SSH, autentificare locală (consola, TTY-uri, sudo, managerul de afișare grafică) este, de asemenea, gestionat cu PAM. În Debian și Ubuntu, de exemplu, fișierul /etc/pam.d/common-auth Este inima acestei configurații, iar în sistemele Red Hat rolul său este jucat sistem-auth (și uneori autentificare prin parolă).
Pe lângă modulele de blocare dedicate, cum ar fi pam_faillock sau pam_tally2, unele distribuții permit limitarea încercărilor și a timpilor de conectare direct prin login.defsÎn acest fișier, situat în /etc/login.defsSunt declarate valori precum următoarele:
- LOGIN_RETRESE: numărul maxim de reîncercări permise la promptul de conectare înainte de abandonarea procesului.
- AUTENTIFICAREA A EXPIRAT: timpul maxim, în secunde, în care sesiunea de conectare poate aștepta introducerea datelor de la utilizator.
De exemplu, dacă ajustați LOGIN_RETRESE Cu o limită de 3 parole, un utilizator va avea la dispoziție doar trei încercări de a introduce parola într-o singură sesiune de conectare înainte ca sistemul să închidă acea încercare, forțându-l să repornească procesul. Nu blochează contul în sine, dar... limită de încercări per sesiune.
În același fișier login.defs De asemenea, puteți ajusta alți parametri de securitate relevanți, cum ar fi:
- PASS_MAX_DAYS: numărul maxim de zile în care o parolă poate fi utilizată înainte ca aceasta să fie forțată să fie modificată.
- PASS_MIN_DAYS: număr minim de zile între schimbările de parolă, pentru a evita schimbările excesiv de frecvente și „în lanț”.
- VÂRSTĂ_AVERTIZARE_INTERVAL: cu zile de preaviz înainte de expirarea parolei, astfel încât utilizatorul să aibă timp să reacționeze.
- PASS_MIN_LEN y PASS_MAX_LEN: lungimea minimă și maximă a parolei.
- PASS_ALWAYS_WARN: avertizează atunci când parola nu îndeplinește anumite criterii de putere.
- ÎNCERCĂRI_REUSITE_ȘI_MODIFICARE: numărul maxim de încercări de schimbare a parolei dacă noua parolă este considerată prea simplă.
- ENCRYPT_METHOD: algoritm hash de utilizat pentru parole (ceea ce este obișnuit astăzi este SHA-512, indicat ca 6 USD).
Aceste directive afectează în principal noi utilizatori Acestea sunt create după ajustarea fișierului login.defs, deci este o modalitate convenabilă de a stabili o politică de bază pentru întreaga organizație.
Gestionarea încercărilor și a expirării cu /etc/shadow și comanda change
Fișierul / etc / shadow Aici sunt stocate parolele criptate ale utilizatorilor locali, împreună cu toate informațiile privind expirarea. Deși nu sunt modificate manual zilnic, înțelegerea structurii lor ajută foarte mult la auditarea și rafinarea politicilor de securitate.
În fiecare linie de / etc / shadow Apar mai multe câmpuri, separate prin două puncte. Cele mai relevante pentru politicile noastre sunt:
- Nume utilizator: identifică contul căruia îi aparțin restul câmpurilor.
- Parolă criptată: este stocat ca $id$salt$hashed, unde $id$ indică algoritmul (1 USD MD5, 2 USD pe an/2 USD pe an, 5 dolari SHA-256, 6 dolari SHA-512), urmată de sare și hașiș.
- Ultima modificare a parolei: numărul de zile de la 1 ianuarie 1970 (epoca) când a fost modificat ultima dată.
- Zile minime și maxime de utilizareAcestea controlează când parola poate fi schimbată din nou și când expiră.
- Zilele de notificare a expirării: cu câte zile înainte de expirare începe să notifice utilizatorul.
- Zile de inactivitateOdată ce parola a expirat, cât durează până când contul este complet dezactivat?
- Data absolută de expirare a contului: tot în format zile din 1970, marchează momentul în care autentificarea nu mai este permisă pentru utilizatorul respectiv.
Pentru a gestiona acești parametri fără a atinge direct /etc/shadow, se folosește următoarea comandă: Schimbare (schimbarea vârstei), care vă permite să ajustați parola și data de expirare a contului pentru anumiți utilizatori.
Câteva opțiuni comune pentru Schimbare sunet:
- -d, –ultima zi: setează ziua ultimei modificări a parolei (în zile de la formatul epoch sau cu o dată lizibilă).
- -E, –expiră: setează data de la care expiră contul.
- -I, –inactiv: marchează contul ca inactiv după un număr de zile de la expirarea parolei.
- -m, –mindays: definește numărul minim de zile dintre schimbările de parolă.
- -M, –maxdays: indică numărul maxim de zile pentru care parola rămâne valabilă.
- -W, –zile de avertizare: setează cu câte zile înainte de expirare va începe notificarea.
- -l, –listă: arată starea curentă de expirare a unui utilizator.
De exemplu, pentru a verifica informațiile de expirare ale utilizatorului Pepe Poate fi executat:
chage -l pepe
Ieșirea va indica data ultimei modificări, dacă parola expiră sau nu, inactivitatea și numărul minim și maxim de zile...printre alte date. Cu acest instrument puteți aplica politici individual, utilizator cu utilizator sau în scripturi care procesează grupuri întregi de conturi.
Politici de complexitate a parolelor cu pam_cracklib și pam_pwquality
Limitarea încercărilor de introducere a parolei este excelentă, dar dacă parolele sunt de genul „123456” sau „qwerty”, nu veți ajunge prea departe. De aceea este crucial. impune parole puternice folosind module PAM, cum ar fi pam_cracklib și, în versiuni mai recente, pam_pwquality.
Modulul pam_pwquality Este o evoluție a cracklib și se integrează cu biblioteci precum libpwquality pentru a verifica dacă parolele nu sunt în dicționare, nu sunt prea scurte și nu repetă modele simple sau datele personale ale utilizatorului. Este inclus nativ în mediile bazate pe RHEL și poate fi instalat în Debian/Ubuntu folosind pachete precum libpam-cracklib y libpam-pwquality.
Odată instalată, configurația principală se face de obicei în fișierul /etc/security/pwquality.confunde puteți defini parametri de complexitate, cum ar fi:
- difok: numărul de caractere care trebuie să fie diferite de parola anterioară.
- minlen: lungimea minimă acceptabilă pentru noua parolă.
- dcredit, ucredit, lcredit, ocreditCredite pentru includerea cifrelor, literelor majuscule, literelor mici și a altor caractere.
- minclass: numărul minim de clase de caractere diferite necesare (minuscule, majuscule, cifre, simboluri).
- maxrepeat: numărul maxim de caractere identice consecutive permis.
- maxclassrepeat: numărul maxim de caractere consecutive din aceeași clasă.
- gecoscheck: verifică dacă parola nu conține cuvinte din câmpul GECOS (comentariu) al utilizatorului din /etc/passwd.
- dictpath: calea către dicționarul folosit pentru a verifica dacă o parolă face parte dintr-un cuvânt cunoscut.
- cuvinte rele: listă de cuvinte care sunt interzise în mod explicit.
Sistemul de credite Este deosebit de flexibilă. Practic, o parolă câștigă credite pentru includerea unei varietăți de caractere; aceste credite pot compensa o lungime puțin mai scurtă. De exemplu, cu minlen=10 y dcredit=2O parolă de 8 caractere cu 2 cifre ar putea trece filtrul deoarece adaugă 2 credite suplimentare. Totuși, dacă definiți credite negative, aveți nevoie de cel puțin un caracter negativ (de exemplu, dcredit=-1 (necesită cel puțin o cifră, fără excepții).
cu minclass Puteți solicita ca parola să includă mai multe clase diferite. O valoare de 2 forțează, de exemplu, o combinație de litere și cifre sau litere și simboluri etc. minclass=4 Ar necesita utilizarea simultană a literelor mici, a literelor majuscule, a cifrelor și a caracterelor speciale, lucru foarte tipic în politicile corporative exigente.
Instrumente precum pwscore Acestea vă permit să testați puterea unei parole în funcție de politicile definite. Când o parolă este transmisă prin pwscoreAceasta vă spune dacă cheia îndeplinește cerințele sau nu și, dacă nu, ce regulă încalcă (lungime insuficientă, prea simplă, prea similară cu cea anterioară etc.).
Configurați politici robuste pe Debian și Ubuntu cu pam_cracklib
În sistemele Debian/Ubuntu este foarte comun să se utilizeze pam_cracklib (sau pwquality prin PAM) pentru a aplica politica de parole. Fișierul cheie de aici este /etc/pam.d/common-password, care definește modul în care sunt gestionate modificările parolei pentru utilizatorii sistemului.
Înainte de a atinge orice, este o bună practică să faceți o copie de rezervă a fișierului:
sudo cp /etc/pam.d/common-password /root/
Apoi îl poți edita cu editorul de text preferat (nano, vim etc.) cu privilegii de superutilizator. Înăuntru vei găsi o linie similară cu:
password requisite pam_cracklib.so retry=3 minlen=8 difok=3
Aici sunt definiți parametri precum următorii:
- reîncercați: numărul de încercări permise utilizatorului la schimbarea parolei, înainte ca modificarea să eșueze.
- minlen: lungimea minimă a parolei.
- difok: numărul de caractere care trebuie să fie diferite de parola anterioară.
- ucredit, lcredit, dcredit, ocredit: credite pozitive sau negative pentru litere majuscule, litere mici, cifre și alte caractere.
De exemplu, o politică destul de exigentă ar putea fi:
password requisite pam_cracklib.so retry=3 minlen=12 difok=3 ucredit=-3 lcredit=-3 dcredit=-3 ocredit=-3
Cu această configurare, Fiecare parolă nouă trebuie să aibă cel puțin 12 caractereParola trebuie să difere cu cel puțin 3 caractere de cea anterioară și să conțină cel puțin 3 litere mari, 3 litere mici, 3 cifre și 3 simboluri. Este o politică foarte strictă, dar extrem de eficientă împotriva parolelor banale.
După ce ați modificat politica, o puteți testa schimbând propria parolă cu:
sudo passwd
Dacă parola nu îndeplinește cerințele, sistemul va afișa mesaje care indică motivul: prea scurtă, similară cu un cuvânt din dicționar, repetiție excesivă a caracterelor etc. Odată ce parola respectă politica, modificarea va fi aplicată fără probleme.
Pe lângă înăsprirea politicii pentru noile modificări, Debian și Ubuntu permit forțarea utilizatorilor existenți să își schimbe parola pentru a se adapta la noile reguli. Cu comanda:
passwd -e USUARIO
Parola acelui utilizator este marcată ca expirată, iar la următoarea conectare, acesta va trebui să seteze o parolă nouă care să respecte politica actuală. De asemenea, puteți controla expirarea parolei globale cu:
passwd -w 5 -x 30 USUARIO
unde -x 30 stabilește o valabilitate maximă de 30 de zile pentru parolă și -w 5 Acest lucru face ca sistemul să înceapă să vă notifice cu 5 zile înainte de data expirării. Dacă adăugați -i 1:
passwd -w 5 -x 30 -i 1 USUARIO
Contul va fi marcat ca inactiv dacă utilizatorul nu își schimbă parola. la o zi după ce a expirat, obligând administratorul să intervină pentru a-l reactiva.
Deși rotirea parolelor a fost recomandată frecvent de ani de zile, ghidurile moderne de securitate (cum ar fi cele de la NIST) califică această practică: Este de preferat să optați pentru parole lungi și complexe și pentru sisteme de autentificare cu doi factori., în loc să forțeze modificări excesiv de frecvente care ajung să genereze chei previzibile.
Configurați cu atenție modulele PAM (pam_faillock, pam_tally2, pam_cracklib, pam_pwquality) și fișierele cheie, cum ar fi /etc/pam.d/common-auth, /etc/pam.d/common-password, /etc/login.defs, / Etc / ssh / sshd_config și să înțeleagă cum se reflectă aceste decizii în / etc / shadowAceasta marchează diferența dintre un sistem „standard” și un mediu cu adevărat securizat împotriva accesului neautorizat și a atacurilor de tip forță brută.
