Shadow 4.20 zrušil minimální dobu platnosti hesla a označil ji za zranitelnost
Balík shadow, ze kterého na Linuxu pocházejí příkazy passwd, chage nebo useradd, vyšel 29. července ve verzi 4.20.0. Zmizel z něj příkaz expiry, přepínače pro minimální dobu mezi dvěma změnami hesla i nástroje groupmems a logoutd. Právě u minimální doby napsal správce projektu, že jde o zranitelnost a náhradu nedostane.

Balík shadow drží na linuxových systémech soubory /etc/passwd a /etc/shadow a patří k němu příkazy passwd, chage, useradd nebo su. Verze 4.20.0 s přezdívkou Ibores vyšla 29. července 2026 a zajímavá je hlavně tím, co v ní není.
Co ve vydání skončilo
Odstraněné věci byly ohlášené jako zastaralé už ve vydání 4.19 z prosince 2025, některé dřív. Podle poznámek k vydání zmizely:
- příkaz
expiry(1), kterým si uživatel mohl nechat zkontrolovat platnost vlastního hesla, - minimální doba mezi dvěma změnami hesla, a to najednou v pěti podobách: přepínač
chage -mvčetně interaktivní verze,passwd -n, proměnnáPASS_MIN_DAYSv souborulogin.defsa polesp_minv/etc/shadow, které se nově ignoruje a maže, - nástroj
groupmems(8)na správu členství ve skupině, který má nahraditusermod(8), - démon
logoutd(8), který odhlašoval uživatele mimo povolené hodiny, - překonané způsoby hašování hesel: hodnoty DES a MD5 u proměnné
ENCRYPT_METHODa proměnnáMD5_CRYPT_ENAB.
Programy nově skončí chybou, když jim některý z odstraněných přepínačů nebo některou z proměnných podstrčíte. Poznámky k vydání to označují za záměr: má to pomoct najít skripty, které na nich stojí.
Dolní mez odešla proto, že ji nikdo nepředepisuje
Stárnutí hesel míří v projektu k úplnému konci. Návrh, který ho označil za zastaralé, se jmenuje rovnou Remove password aging a jeho autor Alejandro Colomar v něm napsal, že hesla by nikdy neměla vypršet a že je doloženo, jak tím bezpečnost hesel klesá (citace přeložena z angličtiny). Návrh na odstranění zbytku je pořád otevřený a autor si do něj poznamenal, že chce vyčkat asi rok, než se ve světě usadí následky téhle změny.
Proč šla jako první dolní mez, a ne horní, stojí v návrhu na odstranění pole sp_min: minimální doba mezi změnami hesla podle něj nevypadá, že by ji něco regulovalo, takže ji šlo odstranit hned. Poznámky k vydání jsou k ní tvrdší, píše se v nich, že se ta možnost považuje za zranitelnost a náhradu nedostane.
Obě meze přitom dělají něco jiného. Horní hranice, tedy PASS_MAX_DAYS, je ta, která uživatele každých pár měsíců nutí vymýšlet nové heslo. Právě tu americký NIST ve čtvrté revizi doporučení SP 800-63B zakazuje: ověřovatel nesmí po uživateli chtít, aby si heslo měnil pravidelně, a smí ho k tomu donutit jen tehdy, když má doklad o kompromitaci. Dolní mez naopak brání tomu, aby si uživatel po vynucené změně hned nastavil zpátky to staré. O ní se v tom doporučení nepíše.
V samotné verzi 4.20.0 horní mez zůstává, jen se z výchozího souboru login.defs vytratily předvyplněné hodnoty PASS_MAX_DAYS a PASS_WARN_AGE. Spolu s nimi jsou dál označené za zastaralé přepínače chage -M, -W a -I a jejich protějšky v passwd, useradd a usermod.
Výchozím hašováním je SHA512
Druhá velká změna se týká toho, čím se heslo v systému uloží. Podpora SHA256 a SHA512 byla dosud volitelná, ve verzi 4.20.0 je bezpodmínečná, a výchozí hodnota ENCRYPT_METHOD se posunula z DES na SHA512. Projekt k tomu dodává, že si správci mají metodu stejně napsat do konfigurace výslovně, protože jiné programy, které login.defs čtou, můžou pořád vycházet z DES.
Dvě regrese, které tam zůstanou
Poznámky k vydání mají vlastní oddíl na dvě chyby, které vznikly jako vedlejší účinek oprav a se kterými se podle projektu musí uživatelé srovnat. První se týká su(1): pouštět ho jako root je kvůli volání ioctl zvanému TIOCSTI nebezpečné, a když to volání nejde zakázat, su nově skončí chybou. Uživatel, který na to narazil, dostal místo přihlášení hlášku o tom, že shell neumí nastavit procesovou skupinu terminálu, a jeho hlášení z 30. července je pořád otevřené.
Druhá se týká usermod(8): když se mu nepodaří odemknout heslo, protože žádné neexistuje, neudělá teď nic. Dřív to byla jen výstraha a příkaz proběhl. Z balíku navíc vypadla nepoužívaná závislost na knihovně libattr.
Kdy to dorazí k uživatelům
Rychlé distribuce jsou u toho hned. Arch Linux má balík shadow ve verzi 4.20.0 v repozitáři core od 31. července 2026. Debian je jinde: podle jeho vlastního přehledu zdrojových balíků mají 8. srpna 2026 vývojové větve sid i forky verzi 4.19.3, stabilní trixie 4.17.4 a bookworm dokonce 4.13.
Kdo tedy o odstraněné přepínače zakopne, pozná to nejdřív na domácím nebo vývojářském stroji. Návrh na odstranění zbytku stárnutí hesel prosí distribuce, ať trojici PASS_MIN_DAYS, PASS_MAX_DAYS a PASS_WARN_AGE vyházejí ze svých souborů login.defs co nejdřív: až vyjde 4.21, programy s takovou konfigurací skončí chybou.
Pro správce z toho plyne konkrétní úklid. Projít skripty a konfigurační management, jestli někde nevolají chage -m, passwd -n, expiry, groupmems nebo logoutd, a podívat se do login.defs na PASS_MIN_DAYS. Chybová hláška místo tichého ignorování je v tomhle případě dobrá zpráva, protože se ta místa ozvou sama.
Zdroje
- shadow-4.20.0 (Ibores), poznámky k vydání projektu shadow, 29. července 2026
- Remove password aging, otevřený návrh v repozitáři shadow-maint/shadow
- Remove support for shadow(5)'s sp_min, návrh začleněný 11. července 2026
- Deprecate and remove the groupmems utility, hlášení z 25. srpna 2025
- NIST SP 800-63B, Digital Identity Guidelines, čtvrtá revize
- shadow 4.20.0.arch1-1, repozitář core Arch Linuxu
- shadow, přehled verzí zdrojového balíku v Debianu