Linux: hol van a felhasználóm jelszava?

Linux rendszereken hogyan vannak tárolva a felhasználók jelszavai? Valószínűleg felmerült már ez a kérdés abban, aki már legalább egyszer elfelejtette :). Ezt mutatom be röviden, így egy magától értetődő jelszócserélési metódus is felmerül. (A bejegyzés lényege nem a jelszó megváltoztatása, azt egyszerűbben is meg lehet oldani; hanem annak bemutatása hogyan van tárolva - amolyan ma is tanultam valamit - , az már csak egy kellemes mellékhatás)

A jelszavak nem "plain text", azaz egyszerű szövegként vannak elmentve, hiszen így könnyen kiolvashatóvá és megszerezhetővé válnának. Ehelyett, ezek hash-e (hasítófüggvény által generált karaktersorozat) van tárolva a /etc/shadow fájlban, mégpedig "sózva" (salt).

Ha megnyitjuk látható hogy minden sorban egy-egy felhasználó van. Egy sorban összesen 9 mező helyezkedik el, ezek kettősponttal vannak elválasztva, melyek rendre:

1 felhasználónév
2 jelszó
3 legutolsó_jelszócsere_időpontja
4 mikor_lehet_legkorábban_jelszót_váltani
5 mennyi_idő_után_kötelező_jelszót_cserélni
6 lejáró_jelszóra_figyelmeztetés_ideje
7 lejárt_jelszóval_még_mennyi_ideig_lehessen_belépni
8 felhasználói_fiók_lejárati_ideje
9 nem_használt

Például egy teljes sor így néz ki:

b@b-Standard-PC-i440FX-PIIX-1996 ~ % sudo cat /etc/shadow
[...]
b:$6$qotOpHGz$7hWOJvQ4Hcrm5qbHGMm.UAUEXr7Ncd4rSKmXjTgesQtQ593deQJpPV5Jjr6EPxWHaJ0SouAHmKqXqfe4YETuq1:17271:0:99999:7:::

Látható hogy nem minden mező van használva, mert nem mindegyik kötelező (pl a felhasználói fiók lehet "örök életű")

A példában a felhasználó b, és ami számunkra az érdekes, az a második mező.
Legelől a $6 a hasítófüggvény képzés során felhasznált kriptográfiai algoritmusra utal. Ezek a következőek lehetnek:

1 MD5
2a Blowfish
5 SHA-256
6 SHA-512

Tehát a mi esetünkben SHA-512 volt használva. (Szerintem mostanára nagyjából minden Linux disztribúcióban ez lett az alapbeállítás)
A következő két dollár jel között a "sózáshoz" használt karaktersor található: qotOpHGz.
Majd jön a jelszó hash-e: 7hWOJvQ4Hcrm5qbHGMm.UAUEXr7Ncd4rSKmXjTgesQtQ593deQJpPV5Jjr6EPxWHaJ0SouAHmKqXqfe4YETuq1

Ennek a felhasználónak a jelszava a.

A hasítófüggvények tulajdonsága, hogy azonos bemenetre azonos kimenetet kapunk, valamint ez a transzformáció csak egyirányú. Azaz a hash-t nem lehet visszaalakítani, így lehetőségünk van leellenőrizni hogy a felhasználó valóban a megfelelő jelszót írta-e be, anélkül, hogy azt valahol tárolnánk.

Lássuk az SHA-512 algoritmussal, qotOpHGz sóval ugyanezt kapjuk-e!

b@b-Standard-PC-i440FX-PIIX-1996 ~ % mkpasswd -m sha-512 -S qotOpHGz -s <<< a
$6$qotOpHGz$7hWOJvQ4Hcrm5qbHGMm.UAUEXr7Ncd4rSKmXjTgesQtQ593deQJpPV5Jjr6EPxWHaJ0SouAHmKqXqfe4YETuq1

(Megjegyzés: az mkpasswd egy crypt(3) front end. Kezdőknek: a népszerű Ubuntu disztribúción a whois csomag tartalmazza.)

Perl alternatíva:
perl -e 'print crypt("jelszo","\$6\$saltsalt\$") . "\n"'

Python alternatíva:
python -c 'import crypt; print(crypt.crypt("jelszo", "$6$saltsalt"))'

(Jleszó egyértelmű hova megy, sózás a "saltsalt" helyére)

Egyezik. Ha egyszerűen egy szövegszerkesztő segítségével kicseréljük a karaktersorozatot, értelemszerűen megváltoztatjuk a felhasználó jelszavát. Az "a" karakter helyére beírva a kívánt jelszót előállítjuk azt tartalmat, amit már közvetlenül elhelyezhetünk a shadow fáljban. Továbbá, a salt-ot (só) is tetszőlegesen átírhatjuk, vagy azt kihagyva egy véletlen generáltat csatol hozzá a rendszer automatikusan.

Ha ténylegesen elfelejtettük a jelszavunk, meglévő rendszeren a fájl egyszerűen átírható egy "Live Linux-os" pendrive segítségével.

További infók:
man 5 shadow
man 3 crypt

Hirdetés

3 pénzügyi döntés, amit minden kisvállalkozónak érdemes átgondolnia az év végéig

PR Ahogy az év vége közeledik, itt az ideje, hogy egy pillanatra megálljunk és áttekintsük vállalkozásunk pénzügyi helyzetét. Ne hagyjuk, hogy az év utolsó hónapjai elússzanak a sürgető feladatok és elfeledett határidők között!

Még van hozzászólás! Tovább