Ogranicz liczbę prób podania hasła w systemie Linux To nie tylko kaprys paranoików, ale jeden z najskuteczniejszych sposobów zapobiegania atakom siłowym i nieautoryzowanemu dostępowi, zarówno w środowiskach stacjonarnych, jak i serwerowych. Jeśli Twój komputer zawiera poufne informacje lub łączy się z internetem, warto zabezpieczyć tę część systemu. przeprowadź audyt swojej sieci lokalnej.
Oprócz ustawienia silnego hasła, skonfiguruj tymczasowe lub stałe blokady po kilku awariach To jest kluczowe: spowalnia ataki, generuje więcej logów do audytu i pozwala połączyć tę ochronę z innymi zasadami dotyczącymi haseł (wygasanie, złożoność, ponowne użycie itp.). Przyjrzyjmy się spokojnie, ale szczegółowo, jak to działa w różnych dystrybucjach i na różnych poziomach systemu.
Blokada konta z powodu nieudanych prób logowania w systemach Red Hat, CentOS i pochodnych
W dystrybucjach na podstawie Red Hat (RHEL, CentOS, Rocky, AlmaLinux…)Blokowanie kont z powodu nieudanych prób jest obsługiwane za pomocą modułu PAM pam_faillockTen moduł kontroluje, ile nieudanych prób logowania jest dozwolonych, jak długo konto jest zablokowane i którzy użytkownicy są blokowani (w tym, jeśli chcesz, użytkownik root).
Aby zastosować tę zasadę, należy edytować globalne pliki PAM, zazwyczaj /etc/pam.d/system-auth i w niektórych wersjach także /etc/pam.d/password-authPliki te pełnią funkcję szablonów dla większości usług uwierzytelniania w systemie (logowanie do konsoli, sudo, SSH itp.).
Pliki te zawierają linie podobne do tych w sekcji auth y konto:
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
Pierwsza linia działania przed rzeczywistym uwierzytelnieniem (preauth)Drugi uruchamia się, gdy uwierzytelnianie się nie powiedzie, a trzeci odpowiada za sprawdzenie statusu blokady konta w fazie kontoMożesz dostosować politykę do swoich potrzeb, modyfikując parametry.
Najczęściej spotykane parametry pam_faillock dźwięk:
- Audyt:Włącza szczegółowe rejestrowanie prób logowania, dzięki czemu w logach systemowych pozostają ślady (np. w / var / log / secure).
- odmów=2Ustawia maksymalną liczbę nieudanych prób podania hasła przed zablokowaniem konta. W tym przykładzie to 2, ale możesz ją zwiększyć (3, 5, 10…).
- czas_odblokowania=120: oznacza czas blokady w sekundach. W tym przypadku będzie to 120 sekund (2 minuty), zanim konto zostanie automatycznie ponownie aktywowane.
- cichyJeśli jest obecny, Nie pokazuje użytkownikowi, że został zablokowanySystem po prostu przestaje akceptować logowania, przez co staje się mniej „gadatliwy” dla atakującego.
Ważnym szczegółem jest to, że domyślnie korzeń jest wykluczony z tego blokuJeśli chcesz, aby do niego również miały zastosowanie te same zasady, musisz dodać parametr nawet_zaprzecza_root w wierszach pam_faillock sekcji auth. To wzmacnia bezpieczeństwo, ale należy rozważyć ryzyko utraty dostępu w przypadku popełnienia zbyt wielu błędów.
Gdy konto jest zablokowane i nie używasz parametru cichySystem może wyświetlać wyraźne komunikaty ostrzegające o przekroczeniu dozwolonej liczby prób przez użytkownika. Jest to przydatne w środowiskach testowych do weryfikacji konfiguracji, choć w środowisku produkcyjnym zazwyczaj lepiej nie podawać zbyt wielu informacji.
Aby wyświetlić nieudane próby logowania konkretnego użytkownika, w systemach Red Hat można użyć polecenia blokada awaryjna wskazujące na konto, które Cię interesuje:
faillock --user lionel
To polecenie pokazuje Ile nieudanych prób wykonał użytkownik?, w tym adres IP używany w przypadku SSH i inne szczegóły istotne dla audytu. Dodatkowo zawsze możesz sprawdzić, co się wyświetla / var / log / securegdzie będą rejestrowane te zdarzenia związane z bezpieczeństwem.

Blokada konta z powodu nieudanych prób logowania w systemach Debian i Ubuntu
W przypadku Debian, Ubuntu i pochodneLogika jest podobna, ale zmienia się używany moduł PAM. Tradycyjnie był on używany pam_tally2 aby zliczać nieudane próby i automatycznie blokować konta, chociaż w nowoczesnych wersjach zaleca się migrację do pam_faillockMimo wszystko pam_tally2 jest nadal bardzo obecny w wielu przewodnikach i środowiskach.
Aby zastosować blokadę na podstawie liczby nieudanych prób w typowym Debianie, zazwyczaj edytujesz plik /etc/pam.d/common-authktóry definiuje standardową politykę uwierzytelniania dla większości usług lokalnych. Możesz dodać do niego następujący wiersz:
auth required pam_tally2.so onerr=fail deny=3 unlock_time=120 audit even_deny_root root_unlock_time=600
Dzięki tej konfiguracji system Konto zostanie zablokowane po 3 nieudanych próbach.Utrzymuje blokadę przez 120 sekund dla zwykłych użytkowników i przez 600 sekund dla roota. Ponadto, jeśli wystąpi jakikolwiek błąd w module (onerr=niepowodzenie), ze względów bezpieczeństwa dostęp jest zabroniony zamiast dozwolony.
Główne parametry pam_tally2 dźwięk:
- onerr=niepowodzenieJeżeli wystąpi problem z odczytem lub aktualizacją licznika prób, uwierzytelnianie zostanie odrzucone, aby uniknąć przypadkowego pozostawienia otwartych drzwi.
- odmów=3: Maksymalna liczba nieudanych prób przed zablokowaniem konta. Wartość 3 jest zazwyczaj całkiem rozsądna w praktyce.
- czas_odblokowania=120: czas w sekundach, przez który konto będzie zablokowane dla użytkowników standardowych.
- Audyt: rejestruje informacje o błędach uwierzytelniania (w Debianie zwykle jest to /var/log/auth.log).
- nawet_zaprzecza_root:wymusza, aby element root również był liczony w tym systemie blokowania, co należy stosować ostrożnie.
- root_unlock_time=600: konkretny czas blokady dla konta root, w sekundach, niezależny od czasu trwania blokady dla innych użytkowników.
Po aktywacji blokady użytkownik zobaczy komunikat informujący, że jego konto zostało tymczasowo wyłączone z powodu zbyt wielu nieudanych prób logowania. Pozwala to administratorowi wykryć podejrzane zachowanie i ostrzec użytkownika o nieprawidłowościach.
Aby wyświetlić nieudane próby zarejestrowane przez pam_tally2 Dla konkretnego użytkownika (na przykład lionel) możesz użyć:
pam_tally2 -u lionel
To polecenie pokazuje liczbę skumulowanych awarii W razie potrzeby umożliwia ręczne zresetowanie licznika, oferując dodatkowe opcje. Co więcej, tak jak w Red Hat, zawsze masz możliwość sprawdzenia /var/log/auth.log aby zobaczyć bardziej szczegółowo, co działo się podczas każdej próby uwierzytelnienia.
Ogranicz próby SSH za pomocą MaxAuthTries
Jednym z najczęstszych punktów wejścia w serwerach Linux jest SSHDlatego tak ważne jest kontrolowanie liczby prób uwierzytelnienia dozwolonych dla każdego połączenia. To właśnie tutaj polityka odgrywa rolę. MaxAuthTries, który jest skonfigurowany w pliku / etc / ssh / sshd_config z serwera OpenSSH.
Pomysł jest prosty: MaxAuthTries definiuje maksymalną liczbę prób uwierzytelnienia dozwolonych na połączenie SSHJeśli limit ten zostanie przekroczony, serwer rozłącza połączenie, zmuszając atakującego do rozpoczęcia nowej sesji w celu kontynuowania prób kombinacji, co znacznie spowalnia zautomatyzowane ataki siłowe.
Aby go skonfigurować, wystarczy edytować plik konfiguracyjny:
sudo nano /etc/ssh/sshd_config
Następnie znajdź lub dodaj linię taką jak ta:
MaxAuthTries 3
Przy tej wartości, Na jedno połączenie SSH dozwolone są tylko trzy próby uwierzytelnieniaJeśli użytkownik popełni ten sam błąd wielokrotnie, demon sshd go wyloguje. Aby zmiana została wprowadzona, należy przeładować lub uruchomić ponownie usługę, na przykład za pomocą:
sudo systemctl restart sshd
MaxAuthTries nie zastępuje modułów PAM, takich jak pam_tally2 lub pam_faillock, lecz działa równolegleSerwer SSH kontroluje, ile kolejnych prób jest dozwolonych w ramach jednej sesji, natomiast PAM przechowuje globalny licznik dla każdego użytkownika i może zablokować jego konto na poziomie systemu.
Oprócz MaxAuthTries zaleca się połączenie innych środków bezpieczeństwa SSH, aby usługa była znacznie bardziej niezawodna:
- Zmień domyślny port:Przestań używać portu 22 i przenieś SSH na mniej oczywisty port. Pomoże to odfiltrować wiele podstawowych automatycznych skanów.
- Używaj kluczy publicznych zamiast samych hasełUwierzytelnianie za pomocą kluczy SSH eliminuje problem słabych haseł i jest znacznie bardziej odporne na ataki siłowe.
- Ogranicz źródła za pomocą zapory sieciowej lub skonfiguruj strefę DMZDopuszczenie protokołu SSH wyłącznie z określonych adresów IP lub zakresów sieci stanowi bardzo skuteczną barierę na poziomie sieci.
Ogranicz lokalne próby uwierzytelnienia za pomocą PAM
Poza SSH, uwierzytelnianie lokalne (konsola, TTY, sudo, graficzny menedżer wyświetlania) są również zarządzane za pomocą PAM. Na przykład w Debianie i Ubuntu plik /etc/pam.d/common-auth Jest sercem tej konfiguracji i w systemach Red Hat pełni swoją rolę autoryzacja systemu (a czasami uwierzytelnianie hasłem).
Oprócz dedykowanych modułów blokujących, takich jak pam_faillock lub pam_tally2, niektóre dystrybucje umożliwiają ograniczenie prób logowania i czasu logowania bezpośrednio przez login.defsW tym pliku, znajdującym się w /etc/login.defsDeklarowane są następujące wartości:
- LOGIN_RETRIES:maksymalna liczba ponownych prób logowania dozwolona przed przerwaniem procesu.
- LIMIT CZASU LOGOWANIA: maksymalny czas (w sekundach), przez jaki sesja logowania może czekać na wprowadzenie danych przez użytkownika.
Na przykład, jeśli dostosujesz LOGIN_RETRIES W przypadku limitu 3 haseł użytkownik będzie miał tylko trzy próby wprowadzenia hasła w ramach jednej sesji logowania, zanim system zamknie tę próbę, zmuszając go do ponownego uruchomienia procesu. Samo w sobie nie blokuje to konta, ale limity prób na sesję.
W tym samym pliku login.defs Możesz również dostosować inne istotne parametry bezpieczeństwa, takie jak:
- PASS_MAX_DAYS:maksymalna liczba dni, przez które hasło może być używane, zanim zostanie wymuszona jego zmiana.
- PASS_MIN_DNI:minimalna liczba dni pomiędzy zmianami hasła, aby uniknąć zbyt częstych i „łańcuchowych” zmian.
- WIEK_OSTRZEŻENIA_PRZEJŚCIA: dni przed wygaśnięciem hasła, aby użytkownik miał czas na reakcję.
- PASS_MIN_LEN y PASS_MAX_LEN: minimalna i maksymalna długość hasła.
- PASS_ALWAYS_WARN:ostrzega, gdy hasło nie spełnia określonych kryteriów siły.
- PRÓBY_PRZEJŚCIA_ZMIANY:maksymalna liczba prób zmiany hasła, jeżeli nowe hasło zostanie uznane za zbyt proste.
- SZYFRUJ_METODĘ: algorytm skrótu używany do tworzenia haseł (co jest dziś powszechne) SHA-512, oznaczony jako $ $ 6).
Dyrektywy te dotyczą przede wszystkim nowi użytkownicy Pliki te tworzy się po dostosowaniu pliku login.defs, dzięki czemu jest to wygodny sposób ustalenia podstawowej polityki dla całej organizacji.
Zarządzanie próbami i wygaśnięciem za pomocą /etc/shadow i polecenia change
Plik / etc / shadow To tutaj system przechowuje zaszyfrowane hasła użytkowników lokalnych wraz z informacjami o ich wygaśnięciu. Chociaż nie są one zmieniane ręcznie codziennie, zrozumienie ich struktury jest niezwykle pomocne w audytowaniu i udoskonalaniu polityk bezpieczeństwa.
W każdym wierszu / etc / shadow Pojawia się kilka pól rozdzielonych dwukropkami. Najbardziej istotne z punktu widzenia naszych zasad są:
- Nazwa użytkownika: identyfikuje konto, do którego należą pozostałe pola.
- Zaszyfrowane hasło: jest przechowywany jako $id$sól$hashedGdzie $id$ wskazuje algorytm (1 MD5, $2a$/$2y$ Rozdymka, 5 SHA-256, 6 SHA-512), a następnie sól i hasz.
- Ostatnia zmiana hasła: liczba dni od 1 stycznia 1970 r. (epoka), kiedy nastąpiła ostatnia modyfikacja.
- Minimalna i maksymalna liczba dni użytkowaniaKontrolują, kiedy hasło można ponownie zmienić i kiedy wygasa.
- Dni wypowiedzenia:ile dni przed upływem terminu ważności użytkownik zostanie powiadomiony.
- Dni bezczynnościIle czasu upłynie, zanim konto zostanie całkowicie zablokowane po wygaśnięciu hasła?
- Bezwzględna data wygaśnięcia konta:od 1970 r. również w formacie dni, oznacza moment, w którym logowanie nie jest już dozwolone dla danego użytkownika.
Aby zarządzać tymi parametrami bez bezpośredniej ingerencji w /etc/shadow, należy użyć następującego polecenia: zmiana (zmienić wiek), która umożliwia dostosowanie hasła i terminu ważności konta dla konkretnych użytkowników.
Niektóre typowe opcje dla zmiana dźwięk:
- -d, –ostatni dzień: ustawia dzień ostatniej zmiany hasła (w dniach od daty epoki lub z czytelną datą).
- -E, –data wygaśnięcia: ustawia datę wygaśnięcia konta.
- -Ja, –nieaktywny: oznacza konto jako nieaktywne po upływie określonej liczby dni od wygaśnięcia hasła.
- -m, –mindays:określa minimalną liczbę dni pomiędzy zmianami hasła.
- -M, –maxdays: oznacza maksymalną liczbę dni, przez które hasło pozostaje ważne.
- -W, –warndays: ustawia liczbę dni przed upływem terminu ważności, na które rozpocznie się wysyłanie powiadomień.
- -l, –list: pokazuje aktualny status wygaśnięcia użytkownika.
Na przykład, aby sprawdzić informacje o dacie wygaśnięcia licencji użytkownika pepe Można to wykonać:
chage -l pepe
Wyjście będzie wskazywało data ostatniej zmiany, czy hasło wygasło, czy nie, brak aktywności oraz minimalna i maksymalna liczba dni...i inne dane. Za pomocą tego narzędzia możesz stosować polityki indywidualnie, dla każdego użytkownika z osobna lub w skryptach przetwarzających całe grupy kont.
Zasady złożoności haseł z pam_cracklib i pam_pwquality
Ograniczanie prób podania hasła jest świetne, ale jeśli hasła brzmią mniej więcej tak: „123456” lub „qwerty”, nie zajdziesz daleko. Dlatego jest to tak ważne. wymuszaj silne hasła korzystając z modułów PAM, takich jak pam_cracklib i w nowszych wersjach, pam_pwquality.
Moduł pam_pwquality Jest to ewolucja cracklibu, integrująca się z bibliotekami takimi jak jakość libpw Aby sprawdzić, czy hasła nie znajdują się w słownikach, nie są zbyt krótkie i nie powtarzają prostych wzorców ani danych osobowych użytkownika. Jest on natywnie zawarty w środowiskach opartych na RHEL i można go zainstalować w systemie Debian/Ubuntu za pomocą pakietów takich jak: libpam-cracklib y libpam-pwquality.
Po zainstalowaniu, główna konfiguracja jest zazwyczaj wykonywana w pliku /etc/security/pwquality.confgdzie można zdefiniować parametry złożoności takie jak:
- Przykro mi: liczba znaków, która musi być inna niż w poprzednim haśle.
- Minlen: minimalna dopuszczalna długość nowego hasła.
- kredyt, ukredytować, l kredyt, on wierzyNależy uwzględnić cyfry, wielkie litery, małe litery i inne znaki.
- minklasa: minimalna liczba różnych klas znaków (małe litery, wielkie litery, cyfry, symbole).
- maks.powtórz:maksymalna liczba kolejnych identycznych znaków dozwolona.
- maksymalne powtórzenie klasy:maksymalna liczba kolejnych znaków tej samej klasy.
- gecoscheck: sprawdza, czy hasło nie zawiera słów z pola GECOS (komentarz) użytkownika w pliku /etc/passwd.
- dykt: ścieżka do słownika używanego do sprawdzenia, czy hasło jest częścią znanego słowa.
- BADWORDS:lista słów, które są wyraźnie zakazane.
System kredyty Jest wyjątkowo elastyczny. Zasadniczo hasło zyskuje punkty za uwzględnienie w nim różnorodnych znaków; te punkty mogą zrekompensować nieco krótszą długość. Na przykład, minlen=10 y dcredit=2Hasło składające się z 8 znaków i 2 cyfr powinno przejść przez filtr, ponieważ dodaje 2 dodatkowe punkty. Jeśli jednak zdefiniujesz punkty ujemne, wymagany jest co najmniej jeden znak ujemny (na przykład: dcredit=-1 (wymaga co najmniej jednej cyfry, bez wyjątków).
z minklasa Możesz wymagać, aby hasło zawierało kilka różnych klas. Wartość 2 wymusza, na przykład, kombinację liter i cyfr, liter i symboli itp. minclass=4 Wymagałoby to jednoczesnego stosowania małych liter, wielkich liter, cyfr i znaków specjalnych, co jest czymś bardzo typowym w przypadku wymagającej polityki korporacyjnej.
Narzędzia takie jak wynik pw Umożliwiają one sprawdzenie siły hasła w oparciu o zdefiniowane zasady. Gdy hasło jest przekazywane wynik pwInformuje ona, czy klucz spełnia wymagania, czy nie, a jeśli nie, to którą regułę narusza (za małą długość, zbyt prosty, zbyt podobny do poprzedniego itd.).
Konfigurowanie solidnych zasad w systemach Debian i Ubuntu za pomocą pam_cracklib
W systemach Debian/Ubuntu bardzo często używa się pam_cracklib (lub pwquality przez PAM), aby wymusić politykę haseł. Plik klucza tutaj to /etc/pam.d/wspólne-hasło, który definiuje sposób zarządzania zmianami haseł dla użytkowników systemu.
Przed dotknięciem czegokolwiek, warto wykonać kopię zapasową pliku:
sudo cp /etc/pam.d/common-password /root/
Następnie możesz go edytować w swoim ulubionym edytorze tekstu (nano, vim itp.) z uprawnieniami superużytkownika. Wewnątrz znajdziesz linię podobną do:
password requisite pam_cracklib.so retry=3 minlen=8 difok=3
Tutaj definiowane są następujące parametry:
- spróbować ponownie: liczba prób, jakie użytkownik może podjąć przy zmianie hasła, zanim zmiana się nie powiedzie.
- Minlen: minimalna długość hasła.
- Przykro mi: liczba znaków, która musi być inna niż w poprzednim haśle.
- ukredytować, l kredyt, kredyt, on wierzy:pozytywne lub negatywne punkty za wielkie litery, małe litery, cyfry i inne znaki.
Na przykład dość wymagająca polityka mogłaby wyglądać następująco:
password requisite pam_cracklib.so retry=3 minlen=12 difok=3 ucredit=-3 lcredit=-3 dcredit=-3 ocredit=-3
W tej konfiguracji Każde nowe hasło musi mieć co najmniej 12 znakówHasło musi różnić się od poprzedniego o co najmniej 3 znaki i zawierać co najmniej 3 wielkie litery, 3 małe litery, 3 cyfry i 3 symbole. To bardzo surowa zasada, ale niezwykle skuteczna w przypadku banalnych haseł.
Po zmianie zasad możesz je przetestować, zmieniając własne hasło za pomocą:
sudo passwd
Jeśli hasło nie spełnia wymagań, system wyświetli komunikaty wskazujące przyczynę: hasło jest za krótkie, przypomina słowo ze słownika, zawiera zbyt wiele powtórzeń znaków itp. Gdy tylko hasło będzie zgodne z polityką, zmiana zostanie wprowadzona bez problemu.
Oprócz zaostrzenia polityki dotyczącej nowych zmian, Debian i Ubuntu pozwalają zmusić istniejących użytkowników do zmiany hasła dostosować się do nowych zasad. Za pomocą polecenia:
passwd -e USUARIO
Hasło tego użytkownika jest oznaczone jako wygasłe i przy następnym logowaniu będzie on musiał ustawić nowe hasło, zgodne z aktualną polityką. Możesz również kontrolować globalny okres ważności hasła za pomocą:
passwd -w 5 -x 30 USUARIO
gdzie -x30 ustala maksymalny okres ważności hasła wynoszący 30 dni i -w 5 Dzięki temu system zacznie Cię powiadamiać 5 dni przed datą wygaśnięcia. Jeśli dodasz -ja 1:
passwd -w 5 -x 30 -i 1 USUARIO
Konto zostanie oznaczone jako nieaktywne, jeśli użytkownik nie zmieni hasła. jeden dzień po wygaśnięciu, zmuszając administratora do interwencji w celu jego ponownej aktywacji.
Chociaż od lat zaleca się częstą rotację haseł, współczesne wytyczne bezpieczeństwa (np. te opracowane przez NIST) kwalifikują tę praktykę jako niedopuszczalną: Lepiej jest wybierać długie i złożone hasła oraz systemy uwierzytelniania dwuskładnikowego, zamiast wymuszać zbyt częste zmiany, które skutkują generowaniem przewidywalnych kluczy.
Starannie skonfiguruj moduły PAM (pam_faillock, pam_tally2, pam_cracklib, pam_pwquality) i pliki kluczy, takie jak /etc/pam.d/common-auth, /etc/pam.d/wspólne-hasło, /etc/login.defs, / etc / ssh / sshd_config i zrozumieć, jak te decyzje znajdują odzwierciedlenie w / etc / shadowStanowi to różnicę między „standardowym” systemem a naprawdę zabezpieczonym środowiskiem chroniącym przed nieautoryzowanym dostępem i atakami siłowymi.
