Árnyék jelszófájl (shadow password file): működése és biztonsági szerepe Linux rendszerekben

Az árnyék jelszófájl a Linux rendszerek egyik fontos biztonsági eleme, amely elrejti a felhasználói jelszavakat a kíváncsi szemek elől. Ez a fájl megakadályozza, hogy illetéktelenek hozzáférjenek az érzékeny adatokhoz, így növeli a rendszer védelmét.
ITSZÓTÁR.hu
53 Min Read
Gyors betekintő

A modern Linux rendszerek biztonsági architektúrájának egyik alapköve a felhasználói hitelesítés és azon belül is a jelszavak biztonságos kezelése. Egy operációs rendszer, amely számos felhasználó adatait és jogosultságait kezeli, rendkívül sebezhetővé válna, ha a jelszavakat nem tárolná és kezelné a legmagasabb szintű biztonsági sztenderdek szerint. A Linux rendszerekben ezt a kritikus feladatot az árnyék jelszófájl, azaz a /etc/shadow fájl látja el. Ez a fájl nem csupán egy egyszerű adattároló, hanem egy komplex biztonsági mechanizmus központi eleme, amely elválasztja a felhasználói fiókok nyilvános adatait a szenzitív jelszóinformációktól, ezzel jelentősen növelve a rendszer ellenálló képességét a potenciális támadásokkal szemben.

A felhasználói jelszavak védelme mindig is kiemelt prioritás volt a számítástechnikában. A korai Unix és Linux rendszerekben a jelszavak titkosított (hash-elt) formában a nyilvánosan olvasható /etc/passwd fájlban tárolódtak. Bár ez a megközelítés egyfajta védelmet nyújtott azáltal, hogy nem a nyers jelszavak kerültek mentésre, hamar nyilvánvalóvá váltak a benne rejlő súlyos biztonsági hiányosságok. A rendszer bármely felhasználója, sőt, a rendszerhez hozzáféréssel rendelkező bármely program olvashatta ezt a fájlt, ami megnyitotta az utat a jelszavak offline feltörése előtt. Ezen sebezhetőség kiküszöbölésére született meg az árnyék jelszófájl koncepciója, amely a jelszó hash-eket egy szigorúan korlátozott hozzáférésű, dedikált fájlba helyezi át.

Ez a cikk mélyrehatóan tárgyalja az árnyék jelszófájl működését, felépítését és elengedhetetlen biztonsági szerepét a Linux ökoszisztémában. Megvizsgáljuk, hogyan váltja ki a régi rendszert, milyen adatokat tárol, hogyan történik a jelszavak hashelése, és milyen eszközök állnak rendelkezésre a kezelésére. Emellett kitérünk a kapcsolódó biztonsági gyakorlatokra, a modern jelszóalgoritmusokra, és arra, hogyan illeszkedik a /etc/shadow fájl a szélesebb körű Linux rendszerbiztonsági stratégiába. Célunk, hogy egy átfogó képet adjunk erről a kulcsfontosságú komponensről, amely nélkül a mai Linux rendszerek biztonsága elképzelhetetlen lenne.

Mi az árnyék jelszófájl és miért van rá szükség?

Az árnyék jelszófájl, vagy /etc/shadow, egy speciális fájl a Linux és Unix-szerű operációs rendszerekben, amely a felhasználói jelszavak hash-elt formáját és a kapcsolódó biztonsági információkat tárolja. Létrehozásának elsődleges oka a régebbi jelszókezelési módszerek biztonsági hiányosságainak orvoslása volt. A korai Unix rendszerekben az összes felhasználói fiók információja, beleértve a felhasználóneveket, UID-eket, GID-eket, shell-t és a jelszó hash-eket, egyetlen fájlban, az /etc/passwd-ben kapott helyet. Ez a fájl hagyományosan nyilvánosan olvasható volt (-rw-r--r-- vagy 644), hogy a rendszerszolgáltatások és programok hozzáférhessenek a felhasználói adatokhoz, például a felhasználónév-UID megfeleltetéshez.

Bár a jelszavak nem nyers, olvasható formában, hanem hash-ként voltak tárolva, a nyilvános hozzáférés súlyos problémát jelentett. Egy támadó, aki hozzáférést szerzett ehhez a fájlhoz (akár egy alacsony jogosultságú felhasználóként), letölthette az összes jelszó hash-t, majd offline módon, nagy számítási teljesítménnyel próbálhatta meg feltörni azokat. Az offline támadások, mint a szótártámadások vagy a nyers erővel történő támadások (brute force), sokkal hatékonyabbak, mint az online próbálkozások, mivel nincs korlátozva a próbálkozások száma, és a támadó kihasználhatja a rendelkezésére álló összes számítási erőforrást. Ezenkívül a gyenge vagy gyakran használt jelszavak különösen sebezhetővé váltak.

Az /etc/shadow fájl bevezetése ezt a problémát oldotta meg. A lényege az volt, hogy a jelszó hash-eket és más érzékeny jelszóinformációkat (például a jelszó lejárati idejét) áthelyezték egy különálló fájlba, amelynek hozzáférési jogai rendkívül szigorúak. Tipikusan ez a fájl csak a root felhasználó számára olvasható, és csak a root csoport tagjai (vagy bizonyos esetekben egy speciális shadow csoport tagjai) férhetnek hozzá. Ezzel a szétválasztással a /etc/passwd továbbra is nyilvánosan olvasható maradhatott, biztosítva a kompatibilitást és a szolgáltatások működését, miközben a legérzékenyebb adatok elrejtésre kerültek a kíváncsi szemek elől.

Az árnyék jelszófájl bevezetése paradigmaváltást jelentett a Linux rendszerbiztonságban, drámaian csökkentve az offline jelszótámadások kockázatát és megteremtve a modern felhasználói hitelesítés alapjait.

A /etc/shadow fájl tehát egy olyan biztonsági réteg, amely megakadályozza, hogy egy kompromittált alacsony jogosultságú felhasználó vagy egy sebezhető szolgáltatás hozzáférjen az összes jelszó hash-hez. Mivel a rendszernek szüksége van a jelszó hash-ekre a felhasználók hitelesítéséhez (amikor beírják a jelszavukat, a rendszer hasheli azt, és összehasonlítja a /etc/shadow-ban tárolt hash-sel), ezért ezeket az adatokat elérhetővé kell tenni egy biztonságos módon. A shadow fájl ezt a célt szolgálja, biztosítva, hogy csak a privilegizált folyamatok férjenek hozzá ezekhez az információkhoz, és csak akkor, amikor arra valóban szükség van.

A régi rendszer: az /etc/passwd fájl története és korlátai

A Unix operációs rendszerek hajnalán, az 1970-es évek elején, a felhasználói fiókok kezelése meglehetősen egyszerű volt. Minden felhasználóval kapcsolatos információ, beleértve a felhasználónevet, a titkosított jelszót, a felhasználói azonosítót (UID), a csoport azonosítót (GID), a teljes nevet vagy kommentet, a home könyvtárat és a shell programot, az /etc/passwd fájlban volt tárolva. Ez a fájl egy egyszerű szöveges fájl volt, ahol minden sor egy felhasználói fiókot reprezentált, és a mezőket kettőspont (:) választotta el egymástól.

Egy tipikus /etc/passwd bejegyzés a következőképpen nézett ki:

felhasznalo:x:1000:1000:Felhasználó Neve:/home/felhasznalo:/bin/bash

A második mezőben, ahol ma az „x” karaktert látjuk, volt egykor a jelszó hash tárolva. Ez a „x” karakter valójában egy jelzés arra, hogy a jelszó hash már nem ebben a fájlban található, hanem az /etc/shadow fájlba került át. Mielőtt ez a mechanizmus bevezetésre került volna, a hash közvetlenül a második mezőben állt. Például:

felhasznalo:sdHj34kL.k/09:1000:1000:Felhasználó Neve:/home/felhasznalo:/bin/bash

A probléma az volt, hogy az /etc/passwd fájl olvasható volt mindenki számára a rendszeren. Ennek oka az volt, hogy számos rendszerszolgáltatásnak és parancsnak (például az ls -l, ps, vagy a finger parancsnak) szüksége volt a felhasználói nevek és azonosítók közötti megfeleltetésre. Ha a fájl nem lett volna olvasható mindenki számára, ezek a parancsok nem tudták volna megfelelően megjeleníteni a felhasználói információkat.

Ez a nyilvános olvashatóság azonban egy jelentős biztonsági rést jelentett. Egy rosszindulatú felhasználó vagy egy kompromittált program könnyedén másolatot készíthetett a teljes /etc/passwd fájlról, beleértve az összes jelszó hash-t is. Ezt követően a támadó offline módon, anélkül, hogy a célrendszeren bármilyen további nyomot hagyna, elkezdhette feltörni a jelszavakat. Az offline támadások sokkal hatékonyabbak, mivel:

  • Nincs korlátozva a próbálkozások száma.
  • A támadó tetszőleges számítási teljesítményt bevethet (pl. GPU-kat).
  • Nincs hálózati késleltetés.
  • A támadás észrevétlen marad a célrendszer számára.

A feltöréshez a támadók gyakran használtak szótártámadásokat, ahol ismert szavak, dátumok, nevek és gyakori jelszóminták hash-eit hasonlították össze a letöltött hash-ekkel. Később megjelentek a rainbow táblák, amelyek előre kiszámított hash-ek óriási adatbázisai voltak, jelentősen felgyorsítva a feltörési folyamatot. A gyenge, rövid, vagy gyakran használt jelszavak perceken vagy akár másodperceken belül feltörhetők voltak ezzel a módszerrel.

Ezen problémák orvoslására vezették be a shadow password rendszert, amely a jelszó hash-eket egy külön, szigorúan védett fájlba helyezte át. Az /etc/passwd fájlban a jelszó mezőbe ekkor egy „x” vagy „*” karakter került, jelezve, hogy a tényleges hash máshol található. Ez a változtatás alapjaiban javította a Linux rendszerek biztonságát a jelszavak tekintetében, anélkül, hogy a régebbi programok és szolgáltatások működését befolyásolta volna, amelyek továbbra is olvashatták az /etc/passwd fájlt a nem érzékeny információkért.

Az /etc/shadow fájl felépítése és mezőinek magyarázata

Az /etc/shadow fájl a Linux rendszerekben a jelszavak és a kapcsolódó biztonsági paraméterek tárolására szolgál. Ez a fájl szigorúan védett, csak a root felhasználó olvashatja. Minden sor egy felhasználói fiókhoz tartozó bejegyzést reprezentál, és a mezőket itt is kettőspont (:) választja el. Egy tipikus bejegyzés a következőképpen néz ki:

felhasznalo:$6$salt_value$hashed_password_value:19000:0:99999:7:::

Nézzük meg részletesen az egyes mezőket:

Mező index Mező neve Leírás
1. Felhasználónév A felhasználói fiók neve, amelyhez a jelszóadatok tartoznak. Ez a név megegyezik az /etc/passwd fájlban szereplő felhasználónévvel.
2. Jelszó hash A felhasználó jelszavának hash-elt és sózott (salted) formája. Ez a mező a legkritikusabb biztonsági információt tartalmazza. Ha a jelszó mező üres, az azt jelenti, hogy a felhasználóhoz nincs beállítva jelszó, és általában nem tud bejelentkezni. Ha a mezőben egy ! vagy * karakter szerepel a hash helyett, az azt jelenti, hogy a fiók zárolva van, és a felhasználó nem tud bejelentkezni jelszóval. A hash formátuma általában a következő: $azonosító$só$hash, ahol az azonosító a használt hashing algoritmust jelöli (pl. $1$ MD5, $5$ SHA-256, $6$ SHA-512).
3. Utolsó jelszóváltozás napja A jelszó utolsó megváltoztatásának dátuma, a Unix epoch óta eltelt napok számában (1970. január 1. óta eltelt napok száma). Ez a mező fontos a jelszó lejárati szabályok betartásához.
4. Minimum napok száma A jelszó utolsó megváltoztatása óta eltelt minimális napok száma, mielőtt a felhasználó újra megváltoztathatja azt. Ez megakadályozza, hogy a felhasználók azonnal visszaváltoztassák a jelszavukat egy korábbi, esetlegesen kompromittált jelszóra. Az érték 0 azt jelenti, hogy nincs korlátozás.
5. Maximum napok száma A jelszó érvényességének maximális hossza napokban. Ezen időszak után a felhasználónak meg kell változtatnia a jelszavát. Az érték 99999 (körülbelül 273 év) azt jelenti, hogy a jelszó soha nem jár le.
6. Figyelmeztetési időszak A jelszó lejáratát megelőző napok száma, amikor a felhasználó figyelmeztetést kap a jelszó megváltoztatásának szükségességéről.
7. Inaktivitási időszak A jelszó lejáratát követő napok száma, amikor a fiók még aktív marad, de a felhasználó nem tud bejelentkezni. Ezen időszak után a fiók zárolásra kerül. Ez a mező akkor releváns, ha a jelszó lejár. Ha -1, akkor nincs inaktivitási időszak.
8. Fiók lejárati dátuma A fiók lejárati dátuma, a Unix epoch óta eltelt napok számában. Ezen dátum után a fiók már nem használható a bejelentkezéshez. Ha üres, a fiók soha nem jár le.
9. Fenntartott mező Fenntartott mező a jövőbeni használatra. Általában üresen hagyják.

Ezek a mezők együttesen biztosítják a jelszavak és a felhasználói fiókok részletes és rugalmas kezelését. A jelszó lejárati szabályok (minimum/maximum napok, figyelmeztetési időszak) lehetővé teszik a rendszergazdák számára, hogy kényszerítsék a felhasználókat a rendszeres jelszócserére, ami alapvető fontosságú a biztonság fenntartásához. Az inaktivitási és fiók lejárati dátumok segítenek a nem használt vagy ideiglenes fiókok automatikus kezelésében, csökkentve ezzel a felügyelet nélküli fiókokból eredő biztonsági kockázatokat.

Az /etc/shadow fájl integritása és titkossága kulcsfontosságú a rendszer biztonságához. Bármilyen jogosulatlan hozzáférés vagy módosítás súlyosan veszélyeztetheti a felhasználói fiókokat és az egész rendszert. Éppen ezért a fájl jogosultságai általában 0640 (-rw-r-----) vagy 0600 (-rw-------) formában vannak beállítva, ahol csak a root felhasználó olvashatja és írhatja, és esetleg a shadow csoport tagjai olvashatják.

Jelszó hash-elés és sózás: modern kriptográfiai alapok

A sózás megakadályozza a hash-ütközéseket és növeli a biztonságot.
A jelszó hash-elése sózással megakadályozza a szivárgott jelszóadatbázisok egyszerű feltörését.

A jelszavak biztonságos tárolásának alapja a hash-elés és a sózás (salting). Ezek a kriptográfiai technikák biztosítják, hogy még ha egy támadó valahogy hozzá is fér a jelszavak hash-elt formájához (például az /etc/shadow fájlhoz, ha az valamilyen módon kompromittálódik), ne tudja közvetlenül visszafejteni a nyers jelszavakat.

Jelszó hash-elés

A hash függvény egy egyirányú matematikai függvény, amely bármilyen hosszúságú bemeneti adatból (ebben az esetben a jelszóból) egy fix hosszúságú kimeneti stringet, úgynevezett hash-t (vagy lenyomatot, ujjlenyomatot) generál. A hash függvényeknek a következő tulajdonságokkal kell rendelkezniük a biztonságos jelszótárolás szempontjából:

  1. Egyirányúság (One-way): Rendkívül nehéz (gyakorlatilag lehetetlen) a hash-ből visszaállítani az eredeti jelszót.
  2. Determinisztikus: Ugyanaz a bemenet mindig ugyanazt a kimeneti hash-t eredményezi.
  3. Ütközés-ellenállás (Collision Resistance): Rendkívül nehéz két különböző bemenetet találni, amelyek ugyanazt a hash-t generálják.
  4. Lavina-effektus (Avalanche Effect): Még egy apró változás is a bemeneti jelszóban teljesen eltérő hash-t eredményez.

Amikor egy felhasználó beírja a jelszavát bejelentkezéskor, a rendszer elvégzi a jelszó hash-elését ugyanazzal az algoritmussal és sóval, mint amivel a jelszót eredetileg tárolták. Ezután összehasonlítja az újonnan generált hash-t a /etc/shadow fájlban tárolt hash-sel. Ha a két hash megegyezik, a felhasználó hitelesítése sikeres.

Sózás (Salting)

A sózás egy kritikus kiegészítő lépés a jelszó hash-eléshez. A só egy véletlenszerű adat, amelyet a jelszóhoz adnak hozzá, mielőtt azt hash-elik. Minden felhasználóhoz egyedi, véletlenszerű só tartozik, amelyet a jelszó hash-ével együtt tárolnak (általában a hash részeként). A sózásnak több fontos előnye van:

  1. Rainbow táblák elleni védelem: A sózás megakadályozza a rainbow táblák használatát. Mivel minden jelszóhoz egyedi só tartozik, még ha két felhasználó ugyanazt a jelszót is használja, a hash-jeik teljesen eltérőek lesznek. Ezáltal a támadóknak minden egyes felhasználói jelszóhoz külön-külön kellene rainbow táblát generálniuk, ami gyakorlatilag lehetetlen.
  2. Szótártámadások és brute force támadások lassítása: A sózás növeli a számítási igényt a támadók számára. Ha egy támadó több jelszó hash-t szerez meg, mindegyiket külön-külön kell feltörnie, mivel mindegyikhez egyedi só tartozik. Ez megakadályozza az „egy hash, egy feltörés” típusú támadásokat, ahol egyetlen jelszó feltörésével több felhasználó is kompromittálódik.

A só általában a jelszó hash elején található, és a hash részeként van tárolva az /etc/shadow fájlban. Például a $6$salt_value$hashed_password_value formátumban a $salt_value rész a só.

Modern jelszó hash algoritmusok

Az idők során számos hash algoritmust használtak jelszavak tárolására. A korai Unix rendszerekben az MD5 alapú algoritmusok voltak elterjedtek, de ezek mára elavultnak és nem biztonságosnak minősülnek. A modern rendszerek erősebb, direkt módon jelszó-hash-elésre tervezett algoritmusokat használnak, amelyek a lassúságra vannak optimalizálva, hogy ellenálljanak a nyers erővel történő támadásoknak.

  • MD5 ($1$): Régebbi, gyors és mára nem biztonságosnak tartott algoritmus. Ütközések generálhatók, és a gyorsasága miatt sebezhető a brute force támadásokkal szemben.
  • SHA-256 ($5$) és SHA-512 ($6$): Ezek a Secure Hash Algorithm család tagjai erősebbek, mint az MD5. Bár önmagukban nem kifejezetten jelszó-hash-elésre lettek tervezve (általános célú kriptográfiai hash-ek), a Unix/Linux rendszerekben a sózással és iterációk hozzáadásával (többszörös hash-elés) növelik az ellenállásukat. A $6$ az SHA-512-t jelöli, amely általában preferált az SHA-256-tal szemben.
  • Blowfish (bcrypt, $2a$, $2b$, $2y$): A bcrypt egy adaptív hash függvény, amelyet kifejezetten jelszó hash-elésre terveztek. Lassan fut, és a „cost factor” (költségfaktor) segítségével konfigurálható a lassúsága. Ez azt jelenti, hogy a jövőben növekvő számítási teljesítmény esetén is növelhető a hash-eléshez szükséges idő, ezzel fenntartva a biztonságot. Széles körben elismert és ajánlott algoritmus.
  • scrypt: Egy másik adaptív, memória-intenzív kulcslevezető függvény, amelyet szintén jelszó hash-elésre terveztek. A bcrypt-hez hasonlóan ellenáll a GPU-alapú brute force támadásoknak, mivel nem csak CPU-időt, hanem jelentős memóriát is igényel.
  • Argon2: A legmodernebb jelszó hash algoritmus, amely 2015-ben nyerte el a Password Hashing Competition-t. Kifejezetten a GPU-alapú és egyedi hardveres támadások elleni védelemre optimalizálták. Három változata van: Argon2d (GPU-támadások ellen), Argon2i (oldalcsatornás támadások ellen), és Argon2id (mindkét típus ellen). Az Argon2 a leginkább ajánlott modern jelszó hash algoritmus.

A Linux rendszerekben a /etc/login.defs fájl konfigurálható a használt jelszó hash algoritmus kiválasztására. A ENCRYPT_METHOD paraméterrel lehet megadni, hogy milyen algoritmust használjon a rendszer az új jelszavak hasheléséhez. Például:

ENCRYPT_METHOD SHA512

A rendszergazdák felelőssége, hogy a legfrissebb és legbiztonságosabb algoritmusokat használják, és rendszeresen felülvizsgálják a jelszópolitikát a változó fenyegetések tükrében. A lassú, sózott és adaptív hash algoritmusok használata alapvető fontosságú a jelszó hash-ek biztonságának fenntartásához.

Az /etc/shadow fájl jogosultságai és tulajdonosi beállításai

Az /etc/shadow fájl biztonságának alapja nem csak a benne tárolt adatok titkossága, hanem a fájlrendszer szintjén érvényesített szigorú hozzáférési korlátozások is. A helytelenül beállított jogosultságok vagy tulajdonosi adatok súlyos biztonsági rést jelenthetnek, még akkor is, ha a jelszavak erősen hash-eltek és sózottak.

Fájl jogosultságok (permissions)

A Linux fájlrendszerben minden fájlhoz és könyvtárhoz tartoznak jogosultságok, amelyek meghatározzák, ki olvashatja, írhatja vagy hajthatja végre az adott elemet. Az /etc/shadow fájl esetében ezek a jogosultságok rendkívül szigorúak. Egy tipikus és biztonságos beállítás a következő:

-rw-r----- 1 root shadow 1319 Jan 1 10:00 /etc/shadow

Ez a jogosultság (0640 decimális formában) a következőket jelenti:

  • -rw- (felhasználó): A fájl tulajdonosa (root) olvashatja (r) és írhatja (w) a fájlt. Ez elengedhetetlen, mivel a root felhasználó az, aki módosíthatja a jelszavakat és a fiókbeállításokat.
  • r-- (csoport): A fájl tulajdonosi csoportja (shadow) csak olvashatja (r) a fájlt. Ez lehetővé teszi bizonyos privilegizált programok (például passwd, login, su, sudo) számára, amelyek a shadow csoport tagjaként futnak, hogy hozzáférjenek a jelszó hash-ekhez a hitelesítéshez. Fontos, hogy ezek a programok szigorúan ellenőrzöttek és biztonságosak legyenek.
  • --- (mások): Mindenki más (a rendszeren lévő összes többi felhasználó és program) számára nincs sem olvasási, sem írási, sem végrehajtási jogosultság. Ez az a kulcsfontosságú beállítás, amely megakadályozza, hogy a nem privilegizált felhasználók hozzáférjenek a jelszó hash-ekhez.

Egy még szigorúbb beállítás lehet a 0600 (-rw-------), ahol még a shadow csoport sem fér hozzá a fájlhoz. Ebben az esetben csak a root felhasználó és a root jogosultsággal futó programok férhetnek hozzá. Ez a beállítás még nagyobb biztonságot nyújt, de bizonyos rendszerek vagy konfigurációk esetén kompatibilitási problémákat okozhat, ha a privilegizált programoknak szükségük van a shadow csoporton keresztül történő hozzáférésre.

A jogosultságok ellenőrzése a ls -l /etc/shadow paranccsal történhet. Bármilyen eltérés a -rw-r----- vagy -rw------- beállítástól azonnali vizsgálatot igényel, mivel potenciális biztonsági incidensre utalhat.

Az /etc/shadow fájl jogosultságainak helyes beállítása létfontosságú. Egy rosszul konfigurált engedélyezés a teljes rendszer biztonságát veszélyeztetheti, lehetővé téve a jelszó hash-ek jogosulatlan hozzáférését és feltörését.

Fájl tulajdonosi beállítások (ownership)

A jogosultságok mellett a fájl tulajdonosának és tulajdonosi csoportjának beállítása is kulcsfontosságú. Az /etc/shadow fájl esetében a következő a standard és biztonságos beállítás:

  • Tulajdonos (User): root. A fájl tulajdonosa mindig a root felhasználó kell, hogy legyen. Ez biztosítja, hogy csak a szuperfelhasználó tudja módosítani a fájlt.
  • Tulajdonosi csoport (Group): shadow (vagy egyes disztribúciókban szintén root). A shadow csoport létezése és használata egy további védelmi réteget biztosít. A rendszeren futó privilegizált programok, amelyeknek szükségük van a jelszó hash-ek olvasására (pl. login, passwd), gyakran futnak a shadow csoport jogosultságaival, anélkül, hogy teljes root jogosultságra lenne szükségük a fájlhoz való hozzáféréshez. Ez a „least privilege” (legkisebb jogosultság) elvét követi, csökkentve a potenciális támadási felületet.

Az ellenőrzés a ls -l /etc/shadow paranccsal történik. A kimenetben a harmadik oszlop mutatja a felhasználói tulajdonost, a negyedik oszlop pedig a csoport tulajdonost. Például:

-rw-r----- 1 root shadow 1319 Jan 1 10:00 /etc/shadow

Ez azt mutatja, hogy a fájl tulajdonosa root, a csoport tulajdonosa pedig shadow.

A jogosultságok módosítása

Ha valamilyen okból kifolyólag a jogosultságok vagy a tulajdonosi adatok helytelenül lettek beállítva, azokat a chmod és chown parancsokkal lehet korrigálni. Fontos, hogy ezeket a parancsokat csak root felhasználóként futtassuk, és rendkívül körültekintően járjunk el, mivel hibás beállítások esetén a rendszer elérhetetlenné válhat:

sudo chmod 0640 /etc/shadow
sudo chown root:shadow /etc/shadow

Ezek a parancsok visszaállítják a standard biztonságos jogosultságokat és tulajdonosi beállításokat. Rendszeres biztonsági auditok során érdemes ellenőrizni ezeket a beállításokat, hogy biztosítsuk a rendszer integritását.

Eszközök az árnyék jelszófájl kezelésére

A Linux rendszerek számos parancssori eszközt biztosítanak az /etc/shadow fájl és a kapcsolódó felhasználói fiókbeállítások kezelésére. Ezek az eszközök a biztonságos interakciót teszik lehetővé a fájllal, elkerülve a közvetlen kézi szerkesztést, ami hibalehetőségeket hordoz magában. A legfontosabb parancsok a következők:

1. passwd: Jelszó módosítása és fiók zárolása/feloldása

A passwd parancs a felhasználói jelszavak megváltoztatására szolgál. Amikor egy felhasználó futtatja a passwd parancsot, a rendszer bekéri a régi jelszót (ha már van), majd kétszer az új jelszót. A rendszer ezután hasheli az új jelszót egy friss sóval, és frissíti a felhasználó bejegyzését az /etc/shadow fájlban.

  • Saját jelszó megváltoztatása:
    passwd
  • Más felhasználó jelszavának megváltoztatása (rootként):
    sudo passwd [felhasználónév]
  • Fiók zárolása (rootként): Ez a parancs egy ! karaktert illeszt be a jelszó hash elé az /etc/shadow fájlban, ami megakadályozza a bejelentkezést.
    sudo passwd -l [felhasználónév]
  • Fiók feloldása (rootként): Eltávolítja a ! karaktert.
    sudo passwd -u [felhasználónév]
  • Jelszó lejáratának beállítása (rootként): Kényszeríti a felhasználót, hogy a következő bejelentkezéskor változtassa meg a jelszavát.
    sudo passwd -e [felhasználónév]

2. chage: Jelszó lejárati információk kezelése

A chage (change age) parancs a jelszó lejárati beállításainak megtekintésére és módosítására szolgál az /etc/shadow fájlban. Ez a parancs rendkívül hasznos a jelszópolitika érvényesítésére.

  • Jelszó lejárati információk megtekintése:
    chage -l [felhasználónév]

    Ez kiírja az utolsó jelszóváltozás dátumát, a jelszó lejáratát, a figyelmeztetési időszakot és más kapcsolódó adatokat.

  • Jelszó lejárati dátumának beállítása:
    sudo chage -E YYYY-MM-DD [felhasználónév]

    A fiók lejárati dátumát állítja be.

  • Maximum napok számának beállítása a jelszó érvényességére:
    sudo chage -M [napok_száma] [felhasználónév]
  • Figyelmeztetési időszak beállítása:
    sudo chage -W [napok_száma] [felhasználónév]
  • Jelszó lejáratának kikapcsolása:
    sudo chage -M -1 [felhasználónév]

    Ez a jelszó maximum napjait 99999-re állítja, effectively kikapcsolva a lejáratot.

3. useradd és usermod: Felhasználók hozzáadása és módosítása

Ezek a parancsok a felhasználói fiókok létrehozására és módosítására szolgálnak, és közvetetten befolyásolják az /etc/shadow fájlt is.

  • useradd: Új felhasználó létrehozása. Az useradd automatikusan létrehoz egy bejegyzést az /etc/passwd és /etc/shadow fájlokban.
    sudo useradd -m -s /bin/bash [új_felhasználónév]

    Ezt követően a passwd paranccsal kell beállítani a jelszót.

  • usermod: Meglévő felhasználói fiók módosítása.
    sudo usermod -L [felhasználónév]

    Fiók zárolása (hasonlóan a passwd -l-hez).

    sudo usermod -U [felhasználónév]

    Fiók feloldása.

    sudo usermod -e YYYY-MM-DD [felhasználónév]

    Fiók lejárati dátumának beállítása.

4. userdel: Felhasználók törlése

A userdel parancs egy felhasználói fiók eltávolítására szolgál a rendszerből. Ez a parancs eltávolítja a felhasználó bejegyzését az /etc/passwd és /etc/shadow fájlokból, valamint opcionálisan törli a home könyvtárat és a mail spool fájlokat.

  • Felhasználó törlése:
    sudo userdel [felhasználónév]
  • Felhasználó törlése home könyvtárral együtt:
    sudo userdel -r [felhasználónév]

5. vipw és vigr: Biztonságos fájlszerkesztés

A vipw és vigr parancsok lehetővé teszik az /etc/passwd és /etc/group fájlok biztonságos szerkesztését. Mivel a /etc/shadow az /etc/passwd-hez kapcsolódik, a vipw parancsnak van egy árnyék verziója is, amely a /etc/shadow fájlt szerkeszti.

  • vipw: Megnyitja az /etc/passwd fájlt egy szerkesztőben (általában vi vagy nano). Ha a rendszer támogatja a shadow password rendszert, akkor a vipw automatikusan kezeli az /etc/shadow fájlt is, biztosítva, hogy a két fájl konzisztens maradjon. Ez a parancs zárolja a fájlt szerkesztés közben, megakadályozva a konkurens módosításokat, és ellenőrzi a szintaktikai helyességet mentés előtt.
  • vipw -s: Ez a parancs kifejezetten az /etc/shadow fájlt nyitja meg szerkesztésre. Ugyanazokat a biztonsági mechanizmusokat biztosítja (zárolás, szintaktikai ellenőrzés), mint a vipw.
    sudo vipw -s

    Ez a parancs csak akkor használatos, ha a rendszergazda nagyon pontosan tudja, mit csinál, mivel a közvetlen szerkesztés hibalehetőségeket rejt.

Ezek az eszközök együttesen biztosítják a rendszergazdák számára a teljes körű kontrollt a felhasználói jelszavak és fiókok felett, miközben fenntartják az /etc/shadow fájl biztonságát és integritását. A parancsok helyes és körültekintő használata elengedhetetlen a stabil és biztonságos Linux környezet fenntartásához.

Biztonsági implikációk és legjobb gyakorlatok

Az /etc/shadow fájl központi szerepet játszik a Linux rendszerek biztonságában, de önmagában nem elegendő. A maximális védelem érdekében számos kapcsolódó biztonsági gyakorlatot és konfigurációt kell alkalmazni. Az alábbiakban bemutatjuk a legfontosabb biztonsági implikációkat és a kapcsolódó legjobb gyakorlatokat.

1. Erős jelszópolitika

A jelszó hash-ek feltörésének legfőbb oka a gyenge jelszavak használata. Még a legmodernebb hash algoritmusok és a sózás sem nyújtanak teljes védelmet, ha a felhasználók könnyen kitalálható jelszavakat választanak. A rendszergazdáknak szigorú jelszópolitikát kell érvényesíteniük, amely a következőket foglalja magában:

  • Minimum hossz: Legalább 12-16 karakteres jelszavak előírása.
  • Komplexitás: Kis- és nagybetűk, számok és speciális karakterek kombinációjának megkövetelése.
  • Előzmények ellenőrzése: Megakadályozni, hogy a felhasználók újra felhasználják korábbi jelszavaikat.
  • Szótárszavak tiltása: Automatikusan elutasítani azokat a jelszavakat, amelyek gyakori szavakból, nevekből vagy ismert mintákból állnak.
  • Rendszeres jelszócsere: A chage paranccsal beállított maximum napok számának használata a jelszó lejárati időszakának meghatározására.

A jelszópolitika beállításai gyakran a /etc/login.defs fájlban vagy a PAM (Pluggable Authentication Modules) konfigurációjában (pl. /etc/pam.d/common-password) találhatók.

2. Fiókok zárolása és felügyelete

A nem használt vagy inaktív fiókok komoly biztonsági kockázatot jelentenek. Fontos ezeket rendszeresen auditálni és kezelni:

  • Inaktív fiókok zárolása/törlése: Az /etc/shadow fájlban beállítható az inaktivitási időszak (7. mező) és a fiók lejárati dátuma (8. mező), hogy az elhagyott fiókok automatikusan inaktiválódjanak vagy törlődjenek.
  • Fiókok zárolása incidensek esetén: Ha egy fiók kompromittálódására gyanú merül fel, azonnal zárolni kell a passwd -l vagy usermod -L paranccsal.
  • A root fiók közvetlen bejelentkezésének tiltása: Sok rendszeren a root felhasználó közvetlen bejelentkezése (pl. SSH-n keresztül) tiltva van, és a felhasználóknak először egy normál fiókba kell bejelentkezniük, majd su vagy sudo paranccsal kell emelt jogosultságot szerezniük. Ez naplózza a jogosultságemelést és csökkenti a root jelszó brute force támadásainak kockázatát.

3. Helyes fájl jogosultságok és tulajdonosi beállítások

Ahogy korábban tárgyaltuk, az /etc/shadow fájl jogosultságai és tulajdonosi beállításai kritikusak. Rendszeresen ellenőrizni kell ezeket a beállításokat, hogy biztosítsuk a -rw-r----- (0640) vagy -rw------- (0600) jogosultságokat és a root:shadow vagy root:root tulajdonosi beállítást. Bármilyen eltérés azonnali beavatkozást igényel.

4. Jelszó hash algoritmusok frissítése

A technológia fejlődésével a hash algoritmusok is elavulhatnak. Fontos a rendszeren használt jelszó hash algoritmusok naprakészen tartása. A /etc/login.defs fájlban beállítható az ENCRYPT_METHOD paraméter a modern algoritmusok (pl. SHA512, bcrypt, Argon2) használatára. A régebbi jelszavak automatikusan frissülnek, amikor a felhasználó legközelebb megváltoztatja a jelszavát, de manuálisan is kényszeríthető a jelszócsere.

5. Fizikai biztonság

Még a legbiztonságosabb digitális védelem is hiábavaló, ha a fizikai biztonság hiányzik. Egy támadó, aki fizikai hozzáférést szerez a szerverhez, képes lehet a lemezekről lementeni az /etc/shadow fájlt, vagy akár a teljes rendszert kompromittálni. A szervereket biztonságos, hozzáférés-vezérelt környezetben kell tárolni.

6. Rendszeres biztonsági audit és naplózás

A rendszeres biztonsági auditok és a naplózás elengedhetetlen a potenciális incidensek felderítéséhez. A következőket érdemes figyelembe venni:

  • Bejelentkezési naplók: Figyelni a sikertelen bejelentkezési kísérleteket, amelyek brute force támadásokra utalhatnak. A /var/log/auth.log vagy /var/log/secure fájlok tartalmazzák ezeket az információkat.
  • Fájl integritás-ellenőrzés: Rendszeres ellenőrzések (pl. aide, tripwire használatával) az /etc/shadow fájl és más kritikus rendszerfájlok jogosulatlan módosításainak felderítésére.
  • Jogosultság-emelési kísérletek: Figyelni a sudo és su parancsok használatát a naplókban.

7. Pluggable Authentication Modules (PAM)

A PAM egy rugalmas keretrendszer a Linux rendszerekben, amely lehetővé teszi a hitelesítési mechanizmusok konfigurálását anélkül, hogy a programokat újra kellene fordítani. A PAM modulok segítségével finomhangolható a jelszópolitika, például:

  • Jelszóerősség-ellenőrzés: A pam_cracklib vagy pam_pwquality modulok segítségével kényszeríthető az erős jelszavak használata.
  • Jelszóelőzmények: A pam_unix.so remember=N opcióval beállítható, hogy a rendszer megjegyezze az utolsó N jelszót, és ne engedje azok újrahasználatát.
  • Bejelentkezési kísérletek korlátozása: A pam_faillock vagy pam_tally2 modulok zárolhatják a fiókot bizonyos számú sikertelen bejelentkezési kísérlet után.

A PAM konfigurációs fájlok általában a /etc/pam.d/ könyvtárban találhatók (pl. common-auth, common-password, sshd, login).

8. Teljes lemezes titkosítás (Full Disk Encryption – FDE)

Bár az /etc/shadow fájl védi a jelszó hash-eket a jogosulatlan hozzáféréstől, a fizikai hozzáférés esetén a lemezről mégis kinyerhetők az adatok. A teljes lemezes titkosítás (FDE) egy további védelmi réteget biztosít azáltal, hogy titkosítja a teljes lemezt. Így ha egy támadó fizikai hozzáférést szerez a géphez, és kiveszi a merevlemezt, az adatok (beleértve az /etc/shadow fájlt is) olvashatatlanok maradnak a titkosítási kulcs nélkül.

Ezen biztonsági gyakorlatok együttes alkalmazása biztosítja a legmagasabb szintű védelmet a jelszavak és a felhasználói fiókok számára, megerősítve a Linux rendszerbiztonság alapjait.

Gyakori támadási vektorok és az árnyék jelszófájl védelmi mechanizmusai

Az árnyék jelszófájl megakadályozza a jelszólopást támadások során.
Az árnyék jelszófájl elválasztja a titkosított jelszavakat, így csökkentve a támadók jogosultságszerzésének esélyét.

Az árnyék jelszófájl bevezetése jelentősen megerősítette a Linux rendszerek jelszavakkal szembeni ellenállását, de a támadók folyamatosan új módszereket keresnek a védelem megkerülésére. Ismerjük meg a leggyakoribb támadási vektorokat és azt, hogy az /etc/shadow hogyan segít ezek kivédésében.

1. Offline nyers erővel történő támadások (Brute Force)

Ez a támadási forma abból áll, hogy a támadó szisztematikusan kipróbál minden lehetséges jelszókombinációt, amíg meg nem találja a megfelelőt. Korábban, amikor a jelszó hash-ek az /etc/passwd fájlban voltak, egy támadó könnyen letölthette azokat, és a saját, nagy teljesítményű hardverén (CPU, GPU) végezhette el a feltörést, korlátlan számú próbálkozással és idővel.

  • Az /etc/shadow védelme: Az árnyék jelszófájl szigorú hozzáférési jogosultságai (csak a root számára olvasható) megakadályozzák, hogy egy alacsony jogosultságú felhasználó vagy egy kompromittált folyamat hozzáférjen a jelszó hash-ekhez. Ha a támadó nem tudja megszerezni a hash-eket, nem tud offline brute force támadást indítani.
  • Modern hash algoritmusok: Az olyan lassú hash algoritmusok, mint a bcrypt, scrypt és Argon2, kifejezetten a brute force támadások lassítására lettek tervezve. Ezek az algoritmusok sok számítási erőforrást és/vagy memóriát igényelnek egyetlen hash generálásához, így egy támadónak rendkívül sok időre van szüksége még egy relatíve rövid jelszó feltöréséhez is.

2. Szótártámadások (Dictionary Attacks)

A szótártámadások a brute force támadások egy specializált formája, ahol a támadó előre összeállított szótárakat (gyakori szavak, nevek, kifejezések, dátumok) használ, és ezek hash-eit hasonlítja össze a célrendszerből megszerzett hash-ekkel. Az emberek hajlamosak gyenge, szótárszavakat használni jelszóként, ami rendkívül sebezhetővé teszi őket ezen támadással szemben.

  • Az /etc/shadow védelme: A shadow fájl önmagában nem védi meg a felhasználót a gyenge jelszavaktól, de azáltal, hogy megakadályozza az offline hozzáférést a hash-ekhez, jelentősen korlátozza a támadó lehetőségeit.
  • Sózás (Salting): A sózás kulcsfontosságú a szótártámadások ellen. Mivel minden felhasználóhoz egyedi, véletlenszerű só tartozik, a támadó nem használhat előre generált szótár-hash táblákat (rainbow táblákat). Minden szótárszót minden egyes felhasználó egyedi sójával külön-külön kell hashelni, ami drámaian növeli a támadás időigényét.
  • Jelszóerősség-ellenőrzés (PAM): A PAM modulok (pl. pam_cracklib, pam_pwquality) konfigurálhatók úgy, hogy a felhasználók ne választhassanak szótárszavakat vagy túl egyszerű jelszavakat, ezzel proaktívan csökkentve a szótártámadások sikerességét.

3. Rainbow táblák elleni támadások

A rainbow táblák előre kiszámított hash-ek óriási adatbázisai, amelyek felgyorsítják a jelszó feltörését. Egy adott hash-hez gyorsan meg lehet találni a hozzá tartozó nyers jelszót, ha az szerepel a táblában.

  • Az /etc/shadow védelme: A sózás a legfőbb védelmi mechanizmus a rainbow táblák ellen. Mivel a só minden felhasználóhoz egyedi, és a hash-elés előtt hozzáadódik a jelszóhoz, a rainbow táblák hatástalanná válnak. Egy támadónak minden egyes egyedi só-jelszó kombinációhoz külön rainbow táblát kellene generálnia, ami gyakorlatilag kivitelezhetetlen.

4. Online brute force/szótártámadások

Ezek a támadások közvetlenül a bejelentkezési felületen keresztül próbálnak jelszavakat kitalálni (pl. SSH, webes bejelentkezés). Mivel a támadó interakcióba lép a célrendszerrel, ezek a támadások lassabbak és könnyebben észlelhetők.

  • Az /etc/shadow közvetett szerepe: Bár az /etc/shadow nem közvetlenül védi a rendszert az online támadásoktól (hiszen a hitelesítési folyamatnak szüksége van rá), a PAM modulok kiegészítő védelmet nyújtanak.
  • PAM modulok (pl. pam_faillock): Ezek a modulok zárolhatják a felhasználói fiókot egy bizonyos számú sikertelen bejelentkezési kísérlet után, vagy beállíthatnak késleltetést a próbálkozások között, ezzel drasztikusan lassítva az online támadásokat.
  • Rendszeres naplózás és monitorozás: A bejelentkezési naplók (/var/log/auth.log) folyamatos figyelése segít az online támadások korai észlelésében. Az olyan eszközök, mint a Fail2Ban, automatikusan blokkolhatják az ismétlődő sikertelen bejelentkezési kísérleteket végző IP-címeket.

5. Helyi jogosultság-emelés (Local Privilege Escalation)

Ha egy támadó már hozzáférést szerzett egy alacsony jogosultságú fiókhoz a rendszeren, megpróbálhatja kihasználni a sebezhetőségeket a jogosultságok emelésére (pl. root jogosultság megszerzésére). Ha sikerül root jogosultságot szereznie, akkor közvetlenül hozzáférhet az /etc/shadow fájlhoz.

  • Az /etc/shadow védelme: A fájl szigorú jogosultságai (0640 vagy 0600) pontosan azért vannak, hogy megakadályozzák az alacsony jogosultságú felhasználókat a hozzáférésben. A helyes konfiguráció betartása alapvető.
  • Rendszeres javítások és frissítések: A jogosultság-emelési sebezhetőségek gyakran szoftveres hibákból erednek. A rendszeres frissítések és javítások alkalmazása elengedhetetlen a rendszer integritásának fenntartásához.
  • SELinux/AppArmor: Ezek a Mandatory Access Control (MAC) rendszerek további védelmi réteget biztosíthatnak. Még ha egy folyamat fut is root jogosultsággal (például egy sebezhető szolgáltatás miatt), az SELinux vagy AppArmor szabályok korlátozhatják, hogy hozzáférjen az /etc/shadow fájlhoz, vagy megakadályozhatják, hogy jogosulatlanul olvassa vagy módosítsa azt.

Összefoglalva, az /etc/shadow fájl a sózással és a modern hash algoritmusokkal kombinálva rendkívül hatékony védelmet nyújt az offline jelszótámadások ellen. A rendszergazdák feladata, hogy ezt a védelmet kiegészítsék erős jelszópolitikával, PAM konfigurációval, rendszeres monitorozással és a rendszer naprakészen tartásával, hogy a teljes Linux rendszerbiztonság a lehető legmagasabb szinten maradjon.

Az árnyék jelszófájl és a szélesebb rendszerbiztonsági ökoszisztéma

Az /etc/shadow fájl kulcsfontosságú eleme a Linux rendszerbiztonságnak, de nem egy elszigetelt komponens. Szorosan integrálódik a szélesebb biztonsági ökoszisztémába, ahol más mechanizmusokkal együttműködve biztosítja a felhasználói hitelesítés és a rendszer integritásának védelmét. Ennek az integrációnak a megértése elengedhetetlen a teljes körű biztonsági stratégia kialakításához.

Pluggable Authentication Modules (PAM)

A PAM (Pluggable Authentication Modules) egy rugalmas keretrendszer, amely elválasztja az alkalmazásokat a hitelesítési mechanizmusoktól. Ez azt jelenti, hogy az alkalmazásoknak nem kell tudniuk, hogyan történik a felhasználók hitelesítése; egyszerűen csak meghívják a PAM API-t, amely aztán a konfigurált modulok alapján végzi el a hitelesítést, fiókkezelést, jelszókezelést és munkamenet-kezelést.

  • Jelszókezelés: A PAM modulok (pl. pam_unix.so) felelősek a jelszavak hasheléséért és az /etc/shadow fájlba történő írásáért. Amikor egy felhasználó jelszót változtat (pl. passwd paranccsal), a PAM modulok lépnek működésbe, hogy ellenőrizzék a jelszóerősséget, kezeljék a jelszóelőzményeket, és végül frissítsék az /etc/shadow bejegyzést.
  • Hitelesítés: Amikor egy felhasználó bejelentkezik (pl. SSH, konzol), a PAM hitelesítési moduljai bekérik a jelszót, hashelik azt, és összehasonlítják az /etc/shadow fájlban tárolt hash-sel. Emellett a PAM képes integrálni más hitelesítési módszereket is, mint például LDAP, Kerberos, vagy kétfaktoros hitelesítés.
  • Fiókkezelés: A PAM fiókmoduljai ellenőrzik a fiók érvényességét, például a jelszó lejáratát, a fiók zárolt állapotát, vagy a fiók lejárati dátumát, amelyek mind az /etc/shadow fájlban tárolt információkon alapulnak.

A PAM konfigurációs fájlok (/etc/pam.d/*) finomhangolásával a rendszergazdák rendkívül részletes és erős jelszópolitikát, bejelentkezési korlátozásokat és fiókkezelési szabályokat érvényesíthetnek, amelyek mind az /etc/shadow fájlban tárolt adatokra épülnek.

Mandatory Access Control (MAC) rendszerek: SELinux és AppArmor

Az SELinux (Security-Enhanced Linux) és az AppArmor olyan Mandatory Access Control (MAC) rendszerek, amelyek egy további védelmi réteget biztosítanak a hagyományos Discretionary Access Control (DAC) jogosultságok (rwx bitek) felett. Ezek a rendszerek szabályokat kényszerítenek ki a folyamatok és a fájlok közötti interakciókra, függetlenül a felhasználói vagy csoportazonosítóktól.

  • /etc/shadow védelem: Az SELinux és AppArmor segítségével megakadályozható, hogy bizonyos folyamatok (még a root jogosultsággal futók is) hozzáférjenek az /etc/shadow fájlhoz, ha ez nem szerepel a szigorúan definiált szabályrendszerükben. Például, ha egy webkiszolgáló folyamat kompromittálódik, az SELinux megakadályozhatja, hogy az hozzáférjen az /etc/shadow fájlhoz, még akkor is, ha a folyamat valamilyen módon emelt jogosultságot szerzett.
  • Kontextus alapú hozzáférés: Az SELinux például fájlkontextusokat használ. Az /etc/shadow fájlhoz egy speciális kontextus tartozik (pl. shadow_t), és csak azok a folyamatok férhetnek hozzá, amelyeknek a szabályai ezt expliciten engedélyezik.

Ezek a MAC rendszerek kritikusak a „defense in depth” (mélységi védelem) stratégia szempontjából, mivel minimalizálják a károkat abban az esetben, ha egy másik biztonsági mechanizmus (például egy alkalmazás sebezhetősége) kompromittálódik.

Fájlrendszer titkosítás és teljes lemezes titkosítás (FDE)

A fájlrendszer titkosítás (pl. eCryptfs, fscrypt) és a teljes lemezes titkosítás (Full Disk Encryption – FDE), gyakran LUKS (Linux Unified Key Setup) segítségével, további védelmet nyújt az /etc/shadow fájl számára a fizikai hozzáférés esetén.

  • Fizikai hozzáférés elleni védelem: Ha egy támadó fizikailag hozzáfér a szerverhez, és kiveszi a merevlemezt, az FDE biztosítja, hogy a lemezen lévő adatok, beleértve az /etc/shadow fájlt is, olvashatatlanok maradjanak a titkosítási kulcs nélkül. Ez megakadályozza az offline jelszó hash kinyerést és feltörést a lemez közvetlen hozzáférésével.
  • Adatvédelem: Nem csak az /etc/shadow fájlt, hanem az összes többi érzékeny adatot is védi a lemezen, ami alapvető fontosságú a GDPR és más adatvédelmi szabályozások betartásához.

Naplózás és monitorozás

A rendszeres naplózás és monitorozás elengedhetetlen a biztonsági események felderítéséhez. Az /etc/shadow fájllal kapcsolatos tevékenységeket is figyelemmel kell kísérni.

  • Bejelentkezési naplók: A sikertelen bejelentkezési kísérletek rögzítése (/var/log/auth.log, /var/log/secure) segíthet az online brute force támadások észlelésében.
  • Fájl integritás-ellenőrzés: Az olyan eszközök, mint az AIDE (Advanced Intrusion Detection Environment) vagy a Tripwire, rendszeresen ellenőrzik az /etc/shadow fájl hash-ét és jogosultságait. Bármilyen változás azonnal riasztást vált ki, jelezve egy potenciális jogosulatlan módosítást vagy kompromittálást.
  • Auditd: A Linux Audit alrendszer (auditd) részletes naplókat generálhat a fájlhozzáférésekről és a rendszerhívásokról. Konfigurálható úgy, hogy rögzítse minden alkalommal, amikor az /etc/shadow fájlt olvassák vagy írják, ami kritikus információt szolgáltat egy esetleges biztonsági incidens kivizsgálásához.

Az /etc/shadow fájl tehát nem egy magányos bástya a rendszerbiztonságban, hanem egy gondosan megtervezett és egymással összefüggő védelmi rétegek hálózatának szerves része. A PAM, a MAC rendszerek, a fájlrendszer titkosítás és a robusztus naplózás mind hozzájárulnak ahhoz, hogy a Linux rendszerek a lehető legmagasabb szintű biztonságot nyújtsák a felhasználói fiókok és a jelszavak számára.

Gyakori problémák és hibaelhárítás az árnyék jelszófájllal kapcsolatban

Bár az /etc/shadow fájl robusztus és megbízható mechanizmus, időnként problémák merülhetnek fel a konfigurációjával vagy a hozzáférésével kapcsolatban. Ezek a problémák gyakran megakadályozzák a felhasználók bejelentkezését, vagy akár a rendszer indulását is befolyásolhatják. Íme néhány gyakori probléma és a hozzájuk tartozó hibaelhárítási tippek:

1. Elfelejtett root jelszó

Ez az egyik leggyakoribb és legsúlyosabb probléma. Ha a root felhasználó elfelejti a jelszavát, akkor nem tud bejelentkezni a rendszerbe emelt jogosultságokkal, és nem tudja módosítani az /etc/shadow fájlt sem.

  • Hibaelhárítás:
    1. Indítsa újra a rendszert és lépjen be Single User Mode-ba (egyetlen felhasználós mód) vagy Recovery Mode-ba: A GRUB menüben általában van lehetőség egyetlen felhasználós módba indítani a rendszert. Ehhez gyakran a kernel paraméterekhez kell hozzáadni a init=/bin/bash vagy rw init=/bin/sh opciót.
    2. Csatlakoztassa újra a root fájlrendszert írási módban: Ha a rendszer csak olvasási módban indul, szükség lehet a fájlrendszer újra csatlakoztatására írási módban: mount -o remount,rw /.
    3. Módosítsa a root jelszót: Futtassa a passwd root parancsot az új jelszó beállításához.
    4. Indítsa újra a rendszert: A jelszó megváltoztatása után indítsa újra a rendszert a normál módban.

2. Helytelen fájl jogosultságok az /etc/shadow fájlon

Ha az /etc/shadow fájl jogosultságai túl engedékenyek (pl. mindenki számára írható), az komoly biztonsági rés. Ha túl szigorúak (pl. még a root sem tudja olvasni), akkor a rendszer nem tudja hitelesíteni a felhasználókat.

  • Hibaelhárítás:
    1. Indítsa újra a rendszert Single User Mode-ba vagy Recovery Mode-ba: Ahogy az elfelejtett jelszó esetén.
    2. Ellenőrizze a jogosultságokat: ls -l /etc/shadow.
    3. Korrigálja a jogosultságokat: chmod 0640 /etc/shadow vagy chmod 0600 /etc/shadow.
    4. Korrigálja a tulajdonost/csoportot: chown root:shadow /etc/shadow.
    5. Indítsa újra a rendszert.

3. Sérült vagy hibás bejegyzés az /etc/shadow fájlban

Kézi szerkesztés, szoftveres hiba vagy rendszerösszeomlás miatt az /etc/shadow fájl sérülhet, vagy egy bejegyzés szintaktikailag hibássá válhat. Ez megakadályozhatja a felhasználók bejelentkezését.

  • Hibaelhárítás:
    1. Indítsa újra a rendszert Single User Mode-ba vagy Recovery Mode-ba.
    2. Használja a vipw -s parancsot: Ez a parancs zárolja a fájlt, és egy szövegszerkesztőben nyitja meg. Ha szintaktikai hibát észlel mentéskor, figyelmeztet, és lehetőséget ad a javításra.
    3. Ellenőrizze a sérült sort: Keresse meg a hibásan formázott sort. Gyakori hiba a mezőelválasztó kettőspontok hiánya vagy többlete, vagy a hash hiánya.
    4. Javítsa ki a hibát: Ha tudja, mi a helyes formátum, javítsa ki. Ha nem, akkor a sérült felhasználói bejegyzést ideiglenesen törölheti, majd a felhasználót újra létrehozhatja (useradd, passwd), vagy egy korábbi biztonsági mentésből állíthatja vissza.
    5. Mentse a fájlt és indítsa újra a rendszert.

4. Fiók zárolva vagy lejárt

Egy felhasználó nem tud bejelentkezni, mert a fiókja zárolva lett (pl. túl sok sikertelen bejelentkezési kísérlet miatt, vagy manuálisan), vagy a jelszava/fiókja lejárt.

  • Hibaelhárítás:
    1. Ellenőrizze a fiók állapotát: sudo chage -l [felhasználónév]. Ez megmutatja a jelszó és a fiók lejárati dátumait, valamint azt, hogy a jelszó lejárt-e.
    2. Fiók feloldása: Ha a fiók zárolva van, a sudo passwd -u [felhasználónév] vagy sudo usermod -U [felhasználónév] paranccsal feloldható.
    3. Jelszó lejáratának beállítása: Ha a jelszó lejárt, a sudo chage -E -1 [felhasználónév] (soha nem jár le) vagy sudo chage -M 99999 [felhasználónév] (soha nem jár le) paranccsal lehet beállítani, vagy kényszeríteni a jelszó megváltoztatását a következő bejelentkezéskor: sudo passwd -e [felhasználónév].
    4. Fiók lejárati dátumának módosítása: Ha a fiók lejárt, a sudo usermod -e YYYY-MM-DD [felhasználónév] paranccsal lehet új lejárati dátumot beállítani, vagy -1-gyel kikapcsolni a lejáratot.

5. Jelszó hash algoritmus problémák

Ritkán előfordulhat, hogy a rendszer konfigurációja megváltozik, és egy régebbi hash algoritmusra vált vissza, vagy egy új rendszer nem ismeri fel a régebbi hash-eket.

  • Hibaelhárítás:
    1. Ellenőrizze az /etc/login.defs fájlt: Győződjön meg róla, hogy az ENCRYPT_METHOD paraméter a kívánt modern hash algoritmusra van beállítva (pl. SHA512).
    2. Frissítse a jelszavakat: Ha a felhasználók jelszavai egy régebbi, gyengébb algoritmussal lettek hashelve, kérje meg őket, hogy változtassák meg jelszavaikat. A rendszer automatikusan az új, erősebb algoritmussal hasheli őket a /etc/login.defs beállításai szerint.

A problémák megelőzése érdekében:

  • Rendszeres biztonsági mentések: Mindig legyen naprakész biztonsági mentés az /etc/shadow és /etc/passwd fájlokról.
  • Körültekintés a kézi szerkesztésnél: Kerülje a fájlok közvetlen szerkesztését, használja a vipw -s parancsot, ha muszáj.
  • Tesztelés: Mielőtt éles környezetben változtatásokat eszközölne, tesztelje azokat egy fejlesztői vagy tesztrendszeren.

Ezen hibaelhárítási lépésekkel a legtöbb /etc/shadow fájllal kapcsolatos probléma megoldható, biztosítva a rendszer stabilitását és a felhasználói hitelesítés zavartalan működését.

Az árnyék jelszófájl jövője és alternatív hitelesítési módszerek

Az /etc/shadow fájl már évtizedek óta a Linux rendszerbiztonság alapköve, és valószínűleg a belátható jövőben is az marad. Azonban a technológia fejlődik, és újabb, még biztonságosabb vagy kényelmesebb hitelesítési módszerek jelennek meg, amelyek kiegészítik vagy bizonyos kontextusokban felváltják a hagyományos jelszó alapú hitelesítést. Az árnyék jelszófájl szerepe is folyamatosan fejlődik ebben az új környezetben.

Modern jelszó hash algoritmusok és a hardveres gyorsítás

Ahogy korábban tárgyaltuk, a jelszó hash algoritmusok folyamatosan fejlődnek. Az Argon2, mint a legújabb generáció képviselője, már most is ellenáll a fejlett, GPU-alapú támadásoknak, mivel memória- és CPU-intenzív. A jövőben várhatóan még inkább optimalizált algoritmusok jelennek meg, amelyek kihasználják a hardveres gyorsítást (pl. speciális CPU utasításkészleteket), miközben megőrzik vagy növelik a brute force támadásokkal szembeni ellenállást.

Az /etc/shadow fájl rugalmasan képes kezelni ezeket az új algoritmusokat, mivel a hash formátum lehetővé teszi az azonosító (pl. $6$ az SHA-512-höz) beillesztését, így a rendszer képes felismerni és megfelelően feldolgozni a különböző típusú hash-eket.

Kétfaktoros és multifaktoros hitelesítés (2FA/MFA)

A jelszavak önmagukban nem mindig elegendőek, különösen, ha gyengék vagy kompromittálódtak. A kétfaktoros (2FA) és multifaktoros (MFA) hitelesítés egy további védelmi réteget biztosít azáltal, hogy a felhasználóknak legalább két különböző típusú hitelesítési tényezőt kell megadniuk:

  • Amit tudnak (jelszó, PIN kód)
  • Amivel rendelkeznek (hardveres token, okostelefon, YubiKey)
  • Akik ők (biometrikus adatok, pl. ujjlenyomat, arcfelismerés)

Bár a 2FA/MFA nem helyettesíti az /etc/shadow fájlt, hanem kiegészíti azt. A felhasználó továbbra is beírja a jelszavát, amelyet az /etc/shadow alapján ellenőriz a rendszer, de ezen felül szükség van egy második faktorra is a sikeres bejelentkezéshez. A PAM keretrendszer kiválóan alkalmas a 2FA/MFA integrálására, például a pam_google_authenticator modul segítségével.

Hardveres biztonsági modulok (HSM) és Trusted Platform Module (TPM)

A Hardveres biztonsági modulok (HSM) és a Trusted Platform Module (TPM) olyan speciális hardvereszközök, amelyek kriptográfiai kulcsokat tárolnak és kriptográfiai műveleteket végeznek biztonságos, illetéktelen beavatkozásnak ellenálló környezetben. Ezek segíthetnek a jelszó hash-ek védelmében is:

  • TPM: A TPM képes titkosítási kulcsokat tárolni, amelyekkel titkosíthatók a merevlemezek (FDE) vagy akár az /etc/shadow fájl. Ez azt jelenti, hogy a titkosítási kulcs soha nem hagyja el a TPM-et, és a lemezen tárolt adatok csak akkor olvashatók, ha a rendszer integritása sértetlen.
  • HSM: Nagyobb rendszerekben vagy felhőalapú környezetekben a HSM-ek használhatók a jelszó hash-ek tárolására és ellenőrzésére, vagy a jelszavak titkosításához használt kulcsok védelmére.

Jelszó nélküli hitelesítés (Passwordless Authentication)

A jelszó nélküli hitelesítés célja, hogy teljesen megszüntesse a jelszavak szükségességét, csökkentve ezzel a jelszólopások és a felhasználói frusztráció kockázatát. Az ilyen rendszerek biometrikus adatokat, hardveres tokeneket (pl. FIDO2/WebAuthn), vagy egyszeri kódokat használnak.

  • WebAuthn/FIDO2: Ezek a szabványok lehetővé teszik a jelszó nélküli hitelesítést webes alkalmazásokban, ahol a felhasználók hardveres biztonsági kulcsokkal, ujjlenyomattal vagy arcfelismeréssel jelentkezhetnek be.
  • Biometria: Ujjlenyomat-olvasók, arcfelismerő rendszerek.

Bár ezek a módszerek egyre elterjedtebbek a grafikus felületeken és a webes alkalmazásokban, a parancssori és rendszerszintű hitelesítésben a jelszavak (és így az /etc/shadow) továbbra is dominálnak. Azonban a PAM lehetővé teszi ezen jelszó nélküli módszerek integrálását a Linux hitelesítési folyamatába, kiegészítve a hagyományos jelszó alapú bejelentkezést.

Decentralizált identitás és blokklánc technológiák

A blokklánc technológiák és a decentralizált identitás (DID) új paradigmát kínálhatnak az identitáskezelésben. Ezek a rendszerek a felhasználóknak adnak nagyobb kontrollt a saját identitásuk felett, és csökkenthetik a központosított identitásszolgáltatók (és az /etc/shadow-hoz hasonló fájlok) sebezhetőségét.

Jelenleg ezek a technológiák még gyerekcipőben járnak a Linux rendszer szintű hitelesítésben, de a jövőben elképzelhető, hogy integrálódnak a PAM-on keresztül, vagy akár új, decentralizált identitáskezelési rendszerek alapjául szolgálnak.

Összességében az /etc/shadow fájl továbbra is a Linux rendszerek jelszóalapú hitelesítésének gerince marad. A folyamatosan fejlődő hash algoritmusok, a PAM rugalmassága és az olyan kiegészítő technológiák, mint a 2FA/MFA, a hardveres biztonsági modulok és a fájlrendszer titkosítás, biztosítják, hogy ez a mechanizmus továbbra is hatékonyan védje a felhasználói jelszavakat a modern fenyegetésekkel szemben. A jövő valószínűleg egy hibrid megközelítést hoz, ahol a jelszavak és az /etc/shadow továbbra is fontos szerepet játszanak, de egyre inkább kiegészítik őket a kényelmesebb és még biztonságosabb alternatív hitelesítési módszerek.

Share This Article
Leave a comment

Vélemény, hozzászólás?

Az e-mail címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük