Od začátku Unix a operační systémy unixového stylu (včetně Linuxu) vždy ukládaly hesla jako kryptografické hashe (1). Tyto hashe byly původně uloženy v /etc/passwd
, ale tento soubor musel být světově čitelný, aby byly informace dostupné pro jiné účely – dokonce i jednoduchý ls -l
potřebuje přečíst /etc/passwd
aby bylo možné převést číselné uživatelské ID každého vlastníka souboru na jeho uživatelské jméno pro zobrazení. Mít hašovaná hesla ve světově čitelném souboru však umožnilo uživatelům se zlými úmysly snadno získat tyto hash a pokusit se vygenerovat použitelná hesla(2) pro účty ostatních uživatelů.
Aby se tomu zabránilo, byla hashovaná hesla nakonec přesunuta do souboru, který může číst pouze root (a příležitostně privilegovaná skupina administrátorů), /etc/shadow
. To skryje hashe před normálními uživateli systému a zároveň je ponechá dostupné pro účely ověření uživatele.
Poznámky :
-
Pedantický, já vím, ale uložená hesla nejsou zašifrované. Jsou hašovány pomocí kryptograficky bezpečného (alespoň v době, kdy byly napsány) hašovacího algoritmu. Primární rozdíly zde spočívají v tom, že hashe mají pevnou délku (délka zašifrovaného textu se liší v závislosti na délce zašifrovaného textu) a nevratné (šifrovaný text lze dešifrovat, hašovaný text nikoli).
-
Protože hash má pevnou délku, existuje nekonečný počet vstupů, které budou odpovídat jakékoli dané hashované reprezentaci. Útočník by proto mohl najít funkční heslo, které se nemusí nutně shodovat s heslem vlastníka – ačkoli je to velmi nepravděpodobné vzhledem k velikosti moderních kryptografických hashů.
/etc/shadow
soubor byl vytvořen z bezpečnostních důvodů a obsahuje zašifrované heslo každého uživatele.
Původně bylo zašifrované heslo uloženo v /etc/passwd
. /etc/passwd
musel být světově čitelný, aby systém mohl mapovat uživatelská jména na uživatelská jména a aby uživatelé mohli o sobě navzájem zjišťovat informace, např. domovský adresář druhého uživatele nebo jeho telefonní číslo, které bylo tradičně uloženo v poli „gecos“ a zobrazeno nástrojem „finger“.
Pak si ale lidé uvědomili, že jde o bezpečnostní problém. Každý, kdo má dostatek času, by mohl provést to, čemu se říká útok bruteforce, programovým generováním zašifrovaných hesel pro každé možné heslo. Pokud to útočník udělal, aniž by se skutečně pokusil přihlásit přes telnet
nebo ssh
, systém nemohl vědět, že byl napaden.
Zašifrované heslo bylo tedy přesunuto do nově vytvořeného /etc/shadow
, který je čitelný pouze pro uživatele root.
Obsahuje také další informace než /etc/passwd
soubor nepodporoval související s uživatelským účtem a heslem, např. kdy bylo heslo naposledy změněno a kdy vyprší jeho platnost.
Viz man 5 shadow
(webová verze) pro úplné podrobnosti o formátu souboru.
Nemohu říci, zda je to stejné pro SUSE, aniž bych věděl, jakou verzi SUSE máte co do činění. Například váš systém SUSE může používat Blowfish spíše než MD5.
Naznačili jste také, že mícháte /etc/shadow
soubor se systémem, na kterém běží jiná linuxová distribuce, ale neuvedl, jaká je druhá distribuce.
Viz například Problémy s migrací stínového souboru ze SuSE 9.3 na Ubuntu Server x86_64.
Chcete-li to zkusit zjistit, otevřete /etc/shadow
a podívejte se, zda pole pro šifrované heslo začíná $1$
nebo $2$
. Pokud obsahuje $1$
, pak je to MD5 a kompatibilní s většinou ostatních distribucí. Pokud obsahuje $2$
, pak je to pravděpodobně Blowfish podle stínových souborů Blowfish na Debianu.
Pokud používáte Ubuntu, první výsledek vyhledávání Google pro Ubuntu blowfish může být dobrým výchozím místem.
Uživatelé jsou uvedeni v /etc/passwd
soubor. Tento soubor obsahuje mnoho informací, které systém používá nejen k tomu, aby se uživatelé mohli přihlásit.
Každý řádek odpovídá zadání uživatele a různá pole jsou oddělena dvojtečkami. První pole je přihlašovací jméno, za ním následuje odpovídající heslo.
V tomto poli bývala uložena šifrovaná hesla. Nicméně /etc/passwd
soubor musí být čitelný pro každého v systému, takže šifrování nebrání útokům hrubou silou, jak řekl @Mikel. Řešením bylo přesunout tato zašifrovaná hesla do souboru čitelného pouze pro uživatele root:/etc/shadow
.
Tedy /etc/shadow
obsahuje zašifrovaná hesla uživatelů systému. Systém ví, že musí zkontrolovat hesla v tomto souboru, když pole hesla v /etc/passwd
obsahovat samotné x (což znamená „kříž do /etc/shadow")