Omezení počtu pokusů o zadání hesla v Linuxu Není to jen vrtoch paranoidní administrátorky; je to jedno z nejúčinnějších opatření k zastavení útoků hrubou silou a neoprávněného přístupu, a to jak v prostředí stolních počítačů, tak i serverů. Pokud váš počítač obsahuje citlivé informace nebo se připojuje k internetu, budete chtít tuto část systému zabezpečit. audit vaší místní sítě.
Kromě nastavení silného hesla, konfigurovat dočasné nebo trvalé zámky po několika selháních To je klíčové: zpomaluje to útočníky, generuje to více protokolů pro audit a umožňuje to kombinovat tuto ochranu s dalšími zásadami pro hesla (expirace, složitost, opětovné použití atd.). Pojďme se klidně, ale podrobně podívat na to, jak se to dělá v různých distribucích a na různých úrovních systému.
Zablokování účtu z důvodu neúspěšných pokusů o přihlášení na systémech Red Hat, CentOS a jejich derivátech
V distribucích založené na Red Hatu (RHEL, CentOS, Rocky, AlmaLinux…)Blokování účtu z důvodu neúspěšných pokusů je spravováno pomocí modulu PAM. pam_faillockTento modul řídí, kolik neúspěšných pokusů o přihlášení je povoleno, jak dlouho je účet uzamčen a kteří uživatelé jsou ovlivněni (včetně, pokud chcete, uživatele root).
Chcete-li tuto zásadu použít, je nutné upravit globální soubory PAM, obvykle /etc/pam.d/system-auth a v některých verzích také /etc/pam.d/password-authTyto soubory fungují jako šablony pro většinu autentizačních služeb v systému (přihlášení do konzole, sudo, SSH atd.).
Tyto soubory obsahují řádky podobné těmto v sekci auth y účet:
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
První linie jedná před skutečným ověřováním (preauth)Druhý se spustí, když selže ověření, a třetí je zodpovědný za kontrolu stavu uzamčení účtu během fáze účetÚpravou parametrů si můžete zásady přizpůsobit svým potřebám.
Nejběžnější parametry pam_faillock Zvuk:
- audit: Umožňuje podrobné protokolování pokusů o přihlášení, takže v systémových protokolech zůstávají stopy (například v / var / log / zabezpečit).
- popřít=2Toto nastavuje maximální počet neúspěšných pokusů o zadání hesla, než bude účet uzamčen. V tomto příkladu jsou to 2, ale můžete jej zvýšit (3, 5, 10…).
- unlock_time=120: označuje dobu blokování v sekundách. Zde by to bylo 120 sekund (2 minuty), než bude účet automaticky znovu aktivován.
- tichýPokud je přítomna, Neukazuje uživateli, že byl zablokovánJednoduše přestane přijímat přihlašovací údaje, čímž se systém stane pro útočníka méně „podrobným“.
Jedním důležitým detailem je, že ve výchozím nastavení kořen je z tohoto bloku vyloučenPokud chcete, aby se na něj vztahovala stejná pravidla, musíte přidat parametr even_deny_root v řádcích pam_faillock sekce auth. Tím se posílí zabezpečení, ale měli byste zvážit riziko ztráty přístupu, pokud uděláte příliš mnoho chyb.
Když je účet uzamčen a parametr nepoužíváte tichýSystém může zobrazit explicitní zprávy s upozorněním, že uživatel překročil povolený počet pokusů. To je užitečné v testovacích prostředích k ověření konfigurace, i když v produkčním prostředí je obvykle nejlepší neposkytovat příliš mnoho informací.
Chcete-li zobrazit neúspěšné pokusy o přihlášení konkrétního uživatele, můžete na systémech Red Hat použít příkaz faillock ukazující na účet, o který máte zájem:
faillock --user lionel
Tento příkaz ukazuje Kolik neúspěšných pokusů uživatel nashromáždil?, včetně použité IP adresy v případě SSH a dalších podrobností relevantních pro audit. Kromě toho si můžete kdykoli prohlédnout, co se objevuje v / var / log / zabezpečitkde budou tyto bezpečnostní události zaznamenávány.

Zablokování účtu kvůli neúspěšným pokusům o přihlášení v Debianu a Ubuntu
V případě Debian, Ubuntu a derivátyLogika je podobná, ale použitý PAM modul se mění. Tradičně se používal pam_tally2 počítat neúspěšné pokusy a automaticky blokovat účty, ačkoli v moderních verzích se doporučuje migrovat na pam_faillockI tak je pam_tally2 stále velmi přítomná v mnoha průvodcích a prostředích.
Chcete-li v typickém Debianu použít zámek na základě počtu neúspěšných pokusů, obvykle upravíte soubor /etc/pam.d/common-authkterý definuje standardní ověřovací zásady pro většinu lokálních služeb. Můžete k němu přidat řádek podobný tomuto:
auth required pam_tally2.so onerr=fail deny=3 unlock_time=120 audit even_deny_root root_unlock_time=600
S touto konfigurací systém Účet je zablokován po 3 neúspěšných pokusech.Pro běžné uživatele udržuje zámek 120 sekund a pro uživatele s oprávněním root 600 sekund. Navíc, pokud dojde k jakékoli chybě modulu (onerr=selhání), z bezpečnostních důvodů je přístup odepřen, nikoli povolen.
Hlavní parametry pam_tally2 Zvuk:
- onerr=selháníPokud se vyskytne problém s načtením nebo aktualizací počítadla pokusů, ověření je odmítnuto, aby se zabránilo nechtěnému ponechání otevřených dveří.
- popřít=3: Maximální počet neúspěšných pokusů před uzamčením účtu. Hodnota 3 je v praxi obvykle docela rozumná.
- unlock_time=120: doba v sekundách, po kterou bude účet pro standardní uživatele uzamčen.
- audit: zaznamenává informace o selhání ověření (v Debianu je to obvykle /var/log/auth.log).
- even_deny_root: vynutí, aby se v tomto zamykacím systému započítával i root, což je třeba používat s opatrností.
- root_unlock_time=600: specifický čas uzamčení pro root účet v sekundách, nezávislý na ostatních uživatelích.
Po aktivaci blokování se uživateli zobrazí zpráva, že jeho účet byl dočasně deaktivován z důvodu příliš velkého počtu neúspěšných pokusů o přihlášení. To umožňuje administrátorovi odhalit podezřelé chování a upozornit uživatele, že je něco v nepořádku.
Chcete-li zobrazit neúspěšné pokusy zaznamenané uživatelem pam_tally2 Pro konkrétního uživatele (například lionel) můžete použít:
pam_tally2 -u lionel
Tento příkaz zobrazuje počet nahromaděných selhání A umožňuje vám v případě potřeby ručně vynulovat počítadlo s dalšími možnostmi. Navíc, stejně jako v Red Hatu, máte vždy možnost si ho prohlédnout. /var/log/auth.log abyste si podrobněji prohlédli, co se stalo při každém pokusu o ověření.
Omezení pokusů o SSH pomocí MaxAuthTries
Jedním z nejběžnějších vstupních bodů na linuxových serverech je SSHProto je zásadní kontrolovat, kolik pokusů o ověření je povoleno na jedno připojení. A právě zde přichází na řadu daná politika. MaxAuthTries, který je nakonfigurován v souboru / etc / ssh / sshd_config ze serveru OpenSSH.
Myšlenka je jednoduchá: MaxAuthTries definuje maximální počet pokusů o ověření povolených na jedno SSH připojení.Pokud je tento limit překročen, server ukončí připojení a donutí útočníka zahájit novou relaci, aby mohl pokračovat v zkoušení kombinací, což výrazně zpomaluje automatizované útoky hrubou silou.
Pro konfiguraci stačí upravit konfigurační soubor:
sudo nano /etc/ssh/sshd_config
Dále vyhledejte nebo přidejte řádek takto:
MaxAuthTries 3
S touto hodnotou, Na jedno SSH připojení jsou povoleny pouze tři pokusy o ověření.Pokud uživatel udělá stejnou chybu vícekrát, démon sshd ho odhlásí. Aby se změna projevila, je nutné službu znovu načíst nebo restartovat, například pomocí:
sudo systemctl restart sshd
MaxAuthTries nenahrazuje PAM moduly jako pam_tally2 nebo pam_faillock, ale spíše pracuje paralelněSSH server řídí, kolik po sobě jdoucích pokusů je povoleno v jedné relaci, zatímco PAM uchovává globální počet pro každého uživatele a může jeho účet zablokovat na úrovni systému.
Kromě MaxAuthTries je vhodné kombinovat další bezpečnostní opatření SSH, aby byla služba mnohem robustnější:
- Změňte výchozí portPřestaňte používat port 22 a přesuňte SSH na méně zřejmý port, což pomůže odfiltrovat mnoho základních automatických skenů.
- Používejte veřejné klíče místo pouhých heselAutentizace pomocí SSH klíčů eliminuje problém slabých hesel a je mnohem odolnější vůči útokům hrubou silou.
- Omezení zdrojů pomocí firewallu nebo konfigurace DMZPovolení SSH pouze z konkrétních IP adres nebo síťových rozsahů přidává velmi účinnou bariéru na úrovni sítě.
Omezení lokálních pokusů o ověření pomocí PAM
Kromě SSH, lokální ověřování (konzole, TTY, sudo, grafický správce zobrazení) je také spravován pomocí PAM. Například v Debianu a Ubuntu soubor /etc/pam.d/common-auth Je to srdce této konfigurace a v systémech Red Hat hraje jeho roli systémové ověřování (a někdy i ověřování heslem).
Kromě specializovaných blokovacích modulů, jako jsou pam_faillock nebo pam_tally2, některé distribuce umožňují omezit pokusy o přihlášení a jejich časy přímo prostřednictvím login.defsV tomto souboru, který se nachází v /etc/login.defsJsou deklarovány hodnoty, jako například následující:
- PŘIHLÁŠENÍ_OPĚTOVNÉ_POKUSY: maximální počet povolených pokusů při přihlašovacím řádku před přerušením procesu.
- ČASOVÝ OUT_PŘIHLÁŠENÍ: maximální doba v sekundách, po kterou může přihlašovací relace čekat na vstup uživatele.
Například, pokud upravíte PŘIHLÁŠENÍ_OPĚTOVNÉ_POKUSY S limitem 3 hesel bude mít uživatel pouze tři pokusy o zadání hesla v rámci jedné přihlašovací relace, než systém tento pokus ukončí a donutí ho restartovat proces. Účet se tím sice nezamkne, ale ano. omezuje počet pokusů na relaci.
Ve stejném souboru login.defs Můžete také upravit další relevantní bezpečnostní parametry, jako například:
- PASS_MAX_DAYS: maximální počet dní, po které lze heslo používat, než je nutné jej změnit.
- PASS_MIN_DAYSMinimální počet dní mezi změnami hesla, aby se zabránilo příliš častým a „řetězovým“ změnám.
- VĚK_VAROVÁNÍ_PROHLÁŠENÍ: několik dní před vypršením platnosti hesla, aby uživatel měl čas reagovat.
- PASS_MIN_LEN y PASS_MAX_LENminimální a maximální délka hesla.
- VŽDY_PROPUSTIT_VAROVÁNÍ: varuje, pokud heslo nesplňuje určitá kritéria síly.
- POKUSY_PRO_ZMĚNU_PROHLÁŠENÍ: maximální počet pokusů o změnu hesla, pokud je nové heslo považováno za příliš jednoduché.
- ZPŮSOB_ŠIFROVÁNÍ: hašovací algoritmus pro použití pro hesla (dnes je to obvyklé SHA-512, označeno jako $ 6 $).
Tyto směrnice se týkají především nových uživatelů Ty se vytvářejí po úpravě souboru login.defs, takže se jedná o pohodlný způsob, jak stanovit základní zásady pro celou organizaci.
Správa pokusů a expirace pomocí /etc/shadow a příkazu change
Soubor / etc / shadow Zde systém ukládá šifrovaná hesla lokálních uživatelů spolu se všemi informacemi o platnosti. I když se hesla denně ručně nemění, pochopení jejich struktury výrazně pomáhá při auditu a zdokonalování bezpečnostních zásad.
V každém řádku / etc / shadow Zobrazí se několik polí oddělených dvojtečkami. Nejrelevantnější pro naše zásady jsou:
- Uživatelské jméno: identifikuje účet, ke kterému patří zbývající pole.
- Šifrované heslo: je uloženo jako $id$salt$hashedKde $id$ označuje algoritmus (1 dolar MD5, Blowfish za 2 roky/za 2 roky, 5 dolarů SHA-256, 6 dolarů SHA-512), následovaná solí a hašišem.
- Poslední změna hesla: počet dní od 1. ledna 1970 (epocha), kdy byla naposledy upravena.
- Minimální a maximální počet dní používáníŘídí, kdy lze heslo znovu změnit a kdy jeho platnost vyprší.
- Dny oznámení o vypršení platnostiKolik dní před vypršením platnosti se začne uživateli zobrazovat upozornění.
- Dny nečinnostiJak dlouho trvá, než je účet po vypršení platnosti hesla zcela deaktivován?
- Absolutní datum expirace účtu: od roku 1970 také ve formátu dnů, označuje okamžik, kdy se daný uživatel již nemůže přihlásit.
Pro správu těchto parametrů bez přímého kontaktu s /etc/shadow se používá následující příkaz: Chage (změna věku), což umožňuje upravit heslo a platnost účtu pro konkrétní uživatele.
Některé běžné možnosti pro Chage Zvuk:
- -d, –poslední den: nastavuje den poslední změny hesla (ve formátu epoch nebo s čitelným datem).
- -E, –platnost vyprší: nastavuje datum, od kterého účet vyprší.
- -I, –neaktivní: označí účet jako neaktivní po určitém počtu dní od vypršení platnosti hesla.
- -m, –mindny: definuje minimální počet dní mezi změnami hesla.
- -M, –maxdnů: označuje maximální počet dní, po které heslo zůstává platné.
- -W, –dny varování: nastavuje, kolik dní před vypršením platnosti se má začít zobrazovat upozornění.
- -l, –seznam: zobrazuje aktuální stav vypršení platnosti uživatele.
Například pro kontrolu informací o vypršení platnosti uživatele pepe Lze jej provést:
chage -l pepe
Východ bude ukazovat datum poslední změny, zda platnost hesla vypršela, neaktivita a minimální a maximální počet dní...mimo jiné údaje. Pomocí tohoto nástroje můžete zásady aplikovat jednotlivě, uživatele po uživateli nebo ve skriptech, které zpracovávají celé skupiny účtů.
Zásady pro složitost hesel s pam_cracklib a pam_pwquality
Omezení pokusů o zadání hesla je skvělé, ale pokud jsou hesla například „123456“ nebo „qwerty“, daleko se nedostanete. Proto je to zásadní. vynucení silných hesel pomocí PAM modulů, jako například pam_cracklib a v novějších verzích, pam_pwquality.
Modul pam_pwquality Jedná se o vývojový stupeň cracklibu a integruje se s knihovnami jako například libpwquality ověřit, zda hesla nejsou ve slovnících, zda nejsou příliš krátká a zda neopakují jednoduché vzory ani osobní údaje uživatele. Je nativně zahrnut v prostředích založených na RHEL a lze jej nainstalovat v Debianu/Ubuntu pomocí balíčků jako například libpam-cracklib y libpam-pwquality.
Po instalaci se hlavní konfigurace obvykle provádí v souboru /etc/security/pwquality.confkde můžete definovat parametry složitosti, jako například:
- difok: počet znaků, které se musí lišit od předchozího hesla.
- minlen: minimální přijatelná délka nového hesla.
- dcredit, ukreditovat, lkredit, okreditovatPoděkování za zahrnutí číslic, velkých písmen, malých písmen a dalších znaků.
- minclassminimální požadovaný počet různých tříd znaků (malá písmena, velká písmena, číslice, symboly).
- maxrepeat: maximální povolený počet po sobě jdoucích identických znaků.
- maxclassrepeat: maximální počet po sobě jdoucích znaků stejné třídy.
- gecoscheck: kontroluje, zda heslo neobsahuje slova z pole GECOS (komentář) uživatele v souboru /etc/passwd.
- diktátorská cesta: cesta ke slovníku, který se používá ke kontrole, zda je heslo součástí známého slova.
- BADWORDSseznam slov, která jsou výslovně zakázána.
Systém úvěry Je obzvláště flexibilní. V podstatě heslo získává kredity za zahrnutí různých znaků; tyto kredity mohou kompenzovat mírně kratší délku. Například s minlen=10 y dcredit=2Heslo o délce 8 znaků se 2 číslicemi by mohlo filtrem projít, protože přidává 2 kredity navíc. Pokud však definujete záporné kredity, budete potřebovat alespoň jeden záporný znak (například dcredit=-1 (vyžaduje alespoň jednu číslici, bez výjimek).
s minclass Heslo může obsahovat několik různých tříd. Hodnota 2 například vynutí kombinaci písmen a číslic nebo písmen a symbolů atd. minclass=4 Vyžadovalo by to současné používání malých písmen, velkých písmen, číslic a speciálních znaků, což je v náročných firemních zásadách velmi typické.
Nástroje jako pwscore Umožňují otestovat sílu hesla podle definovaných zásad. Když je heslo předáno pwscoreTo vám řekne, zda klíč splňuje požadavky, a pokud ne, jaké pravidlo porušuje (nedostatečná délka, příliš jednoduchý, příliš podobný předchozímu atd.).
Konfigurace robustních politik v Debianu a Ubuntu pomocí pam_cracklib
V systémech Debian/Ubuntu je velmi běžné používat pam_cracklib (nebo pwquality přes PAM) pro vynucení zásad hesel. Klíčový soubor je zde /etc/pam.d/common-password, který definuje, jak jsou změny hesel spravovány pro uživatele systému.
Než se čehokoli dotknete, je dobrým zvykem si vytvořit záložní kopii souboru:
sudo cp /etc/pam.d/common-password /root/
Pak jej můžete upravit ve svém oblíbeném textovém editoru (nano, vim atd.) s oprávněními superuživatele. Uvnitř najdete řádek podobný tomuto:
password requisite pam_cracklib.so retry=3 minlen=8 difok=3
Zde jsou definovány parametry, jako například následující:
- opakování: počet pokusů, které má uživatel povoleno změnit heslo, než se změna nezdaří.
- minlenminimální délka hesla.
- difok: počet znaků, které se musí lišit od předchozího hesla.
- ukreditovat, lkredit, dcredit, okreditovat: kladné nebo záporné kredity pro velká písmena, malá písmena, číslice a další znaky.
Například poměrně náročná politika by mohla být:
password requisite pam_cracklib.so retry=3 minlen=12 difok=3 ucredit=-3 lcredit=-3 dcredit=-3 ocredit=-3
S tímto nastavením Každé nové heslo musí mít alespoň 12 znakůHeslo se musí lišit alespoň o 3 znaky od předchozího a musí obsahovat alespoň 3 velká písmena, 3 malá písmena, 3 číslice a 3 symboly. Je to velmi přísné pravidlo, ale extrémně účinné proti triviálním heslům.
Jakmile změníte zásady, můžete si je otestovat změnou vlastního hesla pomocí:
sudo passwd
Pokud heslo nesplňuje požadavky, systém zobrazí zprávy s uvedením důvodu: příliš krátké, podobné slovníku, nadměrné opakování znaků atd. Jakmile heslo splňuje zásady, změna se bez problémů projeví.
Kromě zpřísnění zásad pro nové změny Debian a Ubuntu umožňují vynutit stávajícím uživatelům změnu hesla přizpůsobit se novým pravidlům. Příkazem:
passwd -e USUARIO
Heslo daného uživatele je označeno jako vypršené a při dalším přihlášení bude muset nastavit nové heslo, které bude splňovat aktuální zásady. Platnost hesla můžete také globálně ovládat pomocí:
passwd -w 5 -x 30 USUARIO
kde -x 30 stanoví maximální platnost hesla 30 dní a -w 5 Díky tomu vás systém začne upozorňovat 5 dní před datem vypršení platnosti. Pokud přidáte -já 1:
passwd -w 5 -x 30 -i 1 USUARIO
Účet bude označen jako neaktivní, pokud si uživatel nezmění heslo. jeden den po jeho vypršení, což donutí administrátora zasáhnout a znovu jej aktivovat.
Ačkoli se rotace hesel často doporučuje již léta, moderní bezpečnostní směrnice (například směrnice NIST) tuto praxi opravňují: Je vhodnější volit dlouhá a složitá hesla a systémy dvoufaktorového ověřování., spíše než vynucovat příliš časté změny, které nakonec generují předvídatelné klíče.
Pečlivě nakonfigurujte moduly PAM (pam_faillock, pam_tally2, pam_cracklib, pam_pwquality) a klíčové soubory, jako například /etc/pam.d/common-auth, /etc/pam.d/common-password, /etc/login.defs, / etc / ssh / sshd_config a pochopit, jak se tato rozhodnutí odrážejí v / etc / shadowTo představuje rozdíl mezi „standardním“ systémem a skutečně odolným prostředím proti neoprávněnému přístupu a útokům hrubou silou.
