Programování

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.

· 7 zhlédnutí

Okno terminálu GNOME s výpisem příkazů ls a uname -a
Nástroje z balíku shadow se ovládají z příkazové řádky. Na snímku je okno terminálu GNOME s výpisem příkazu uname -a. Foto: xmodulo, Flickr (CC BY 2.0)

Balík shadow drží na linuxových systémech soubory /etc/passwd/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 -m včetně interaktivní verze, passwd -n, proměnná PASS_MIN_DAYS v souboru login.defs a pole sp_min/etc/shadow, které se nově ignoruje a maže,
  • nástroj groupmems(8) na správu členství ve skupině, který má nahradit usermod(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_METHOD a 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_DAYSPASS_WARN_AGE. Spolu s nimi jsou dál označené za zastaralé přepínače chage -M, -W-I a jejich protějšky v passwd, useraddusermod.

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_DAYSPASS_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

Programování

Diskuse

Zatím tu nikdo nediskutuje.

Diskutovat mohou přihlášení čtenáři – přihlaste se nebo si založte účet.

← zpět na výpis