Dokumentáció/SL9.3/Adminisztráció/Hozzáférés-vezérlési listák Linuxban

Icon-access.png Ez a fejezet a POSIX ACL-ek (hozzáférés-vezérlési listák) hátterének és funkcióinak rövid összefoglalását írja le Linux-fájlrendszerek használata esetén. Az ACL-ek a fájlrendszer-objektumok hagyományos jogosultságainak kiterjesztéseként használhatók. ACL-ek segítségével a jogosultságok rugalmasabban adhatók meg, mint amit a hagyományos jogosultsági alapelvek lehetővé tesznek.

Bevezetés

A POSIX ACL elnevezés azt sugallja, hogy ez egy igazi POSIX- (portable operating system interface) szabvány. A megfelelő draft szabványokat – POSIX 1003.1e és POSIX 1003.2c – azonban több okból is visszavonták. Ennek ellenére a UNIX-családhoz tartozó számos rendszeren megtalálható ACL-ek ezekre a vázlatokra épülnek és a fájlrendszer ACL-ek megvalósítása – ahogy a jelen fejezetben le van írva – ezeket a szabványokat követi. Ezek a következő címen tekinthetők meg: http://wt.xpilot.org/publications/posix.1e/

Az ACL-ek előnyei

A Linux-rendszer fájlobjektumaihoz hagyományosan három jogosultsághalmaz van megadva. Olvasási (read, r), írási (write, w) és végrehajtási (execute, x) jogosultságokat kaphat mind a három felhasználótípus: – a fájl tulajdonosa, a csoport és az összes többi felhasználó. Megadható a felhasználói azonosító beállítása (setuid), a csoportazonosító beállítása (setgid) és a sticky (ragadós) bit. A témakör részletes leírását a Felhasználói kézikönyv tartalmazza. Ezek az alapelvek a legtöbb gyakorlati esethez teljesen megfelelők. Összetettebb helyzetek vagy speciális alkalmazások esetén azonban a rendszeradminisztrátoroknak számos trükköt kellett alkalmazniuk a hagyományos jogosultsági alapelvek korlátainak megkerüléséhez.

Az ACL-ek olyan helyzetekben használhatók, amelyek a hagyományos fájljogosultság fogalmának kiterjesztését igénylik. Lehetővé teszik a jogosultságok egyedi felhasználókhoz vagy csoportokhoz rendelését akkor is, ha ezek nem egyeznek meg az eredeti tulajdonossal vagy csoporttulajdonossal. A hozzáférés-vezérlési lista a Linux-kernel funkciója, és jelenleg a ReiserFS, Ext2, Ext3, JFS és XFS támogatja. ACL-ek használatával az összetett helyzetek is megoldhatók anélkül, hogy alkalmazásszinten kellene megvalósítani összetett jogosultsági modelleket.

Az ACL-ek előnye egyértelmű olyan helyzetekben, mint például egy Windows-szerver Linux-szerverrel helyettesítése. A csatlakoztatott munkaállomások egy része továbbra is Windows alatt futhat, még akár az áttérés után is. A Linux-rendszer Samba segítségével fájl- és nyomtatási szolgáltatásokat biztosít a Windows-kliensek számára. Mivel a Samba támogatja a hozzáférés-vezérlési listák használatát, a felhasználói jogosultságok a grafikus felhasználói felületen a Linux-szerveren és Windowson is beállíthatók (csak Windows NT és újabb rendszerek esetén). A winbindd program segítségével olyan felhasználókhoz is rendelhetők jogosultságok, akik csak a Windows-tartományban léteznek és nem rendelkeznek azonosítóval a Linux-szerveren.

Meghatározások

felhasználói osztály
A hagyományos POSIX jogosultsági elv a fájlrendszeren belül három felhasználói osztályt használ a jogosultságok hozzárendeléséhez: ezek a tulajdonos, a tulajdonos csoport és az egyéb felhasználók. Három jogosultsági bit állítható be a felhasználói osztályokhoz: az olvasás (r), az írás (w) és a végrehajtás (x) jelzésére.
hozzáférési ACL
A fájlrendszer-objektumok (fájlok és könyvtárak) felhasználói és csoporthozzáférési jogosultságait a hozzáférési ACL-ek határozzák meg.
alapértelmezett ACL
Az alapértelmezett ACL-ek csak a könyvtárakra alkalmazhatók. Ezek határozzák meg, hogy egy fájlrendszer-objektum milyen jogosultságokat örököl a szülőkönyvtártól a létrehozása során.
ACL-bejegyzés
Minden hozzáférés-vezérlési lista ACL-bejegyzésekből áll. Az ACL-bejegyzések egy típust tartalmaznak (ACL-bejegyzéstípusok), egy minősítőt ahhoz a felhasználóhoz vagy csoporthoz, amelyre a bejegyzés hivatkozik, valamint egy jogosultsághalmazt. Bizonyos bejegyzéstípusok esetén a csoport vagy felhasználó minősítése nincs megadva.

ACL-ek kezelése

A ACL-bejegyzéstípusok összefoglalja a hat lehetséges ACL-bejegyzést, amelyek mindegyike egy adott felhasználó vagy felhasználói csoport jogosultságait adja meg. A tulajdonos bejegyzés a fájlt vagy könyvtárat birtokló felhasználó jogosultságait adja meg. A tulajdonoscsoport bejegyzés adja meg a fájlt birtokló csoport jogosultságait. Az adminisztrátor (superuser) a chown vagy chgrp parancs segítségével megváltoztathatja a tulajdonost vagy a tulajdonoscsoportot. Ez esetben a tulajdonos és a tulajdonoscsoport bejegyzés az új tulajdonosra és tulajdonoscsoportra hivatkozik. A megnevezett felhasználó bejegyzések a minősítő mezőben megadott felhasználó jogosultságait adják meg, amely a táblázatban (ACL-bejegyzéstípusok) látható szöveges űrlap középső mezeje. A megnevezett csoport bejegyzések a minősítő mezőben megadott csoport jogosultságait adják meg. Csak a megnevezett felhasználó és csoport bejegyzések rendelkeznek nem üres minősítőmezővel. Az other (egyéb) bejegyzés a maradék felhasználók jogosultságait adja meg.

A mask (maszk) bejegyzés tovább korlátozza a megnevezett felhasználó, megnevezett csoport és a tulajdonoscsoport bejegyzések által megadott jogosultságokat: megadja, ezen bejegyzések mely jogosultsága érvényes és melyek vannak maszkolva. Ha a jogosultságok az említett bejegyzések egyikében és a maszkban egyaránt léteznek, akkor ezek érvényesek. A csak a maszkban vagy csak az aktuális bejegyzésben lévő jogosultságok nem érvényesek – ezek a jogosultságok nem lesznek megadva. A tulajdonos és tulajdonoscsoport részben megadott bejegyzések mindig érvényesek. A következő példa (Hozzáférési jogosultságok maszkolása) illusztrálja ezt a mechanizmust:

Az ACL-eknek két alapvető osztálya van: A minimális ACL csak a tulajdonos, tulajdonoscsoport és az egyéb típusok bejegyzéseit tartalmazza, amely a fájlok és könyvtárak szokásos jogosultsági bitjeinek felelnek meg. A kiterjesztett ACL ennél többet mond. Tartalmaznia kell egy maszk bejegyzést és tartalmazhat több megnevezett felhasználó és megnevezett csoport bejegyzést is.


Táblázat: ACL-bejegyzéstípusok
Típus Szöveges forma
tulajdonos user::rwx
megnevezett felhasználó user:név:rwx
tulajdonoscsoport group::rwx
megnevezett csoport group:név:rwx
maszk mask::rwx
egyéb other::rwx


Táblázat: Hozzáférési jogosultságok maszkolása
Bejegyzéstípus Szöveges forma Jogosultságok
megnevezett felhasználó user:geeko:r-x r-x
maszk mask::rw- rw-
érvényes jogosultságok: r--


ACL-bejegyzések és fájlmód-jogosultságbitek

A Minimális ACL: Az ACL-bejegyzések és a jogosultságbitek összehasonlítása és a Kiterjesztett ACL: Az ACL-bejegyzések és a jogosultságbitek összehasonlítása a minimális és a kiterjesztett ACL-eket ábrázolja. Az ábrák három blokkba vannak rendezve – a baloldali blokk az ACL-bejegyzések típusspecifikációját, a középső egy minta ACL-t, a jobboldali pedig a szokásos jogosultság-alapelvnek megfelelő jogosultságbiteket jeleníti meg, mint ahogy azt például az ls -l parancs is kiírná. A tulajdonos osztály jogosultságai mindkét esetben a tulajdonos ACL-bejegyzésnek vannak megfeleltetve. Az egyéb osztály jogosultságai a megfelelő ACL-bejegyzésnek vannak megfeleltetve. A csoportosztály jogosultságok megfeleltetése a két esetben eltér.
Minimális ACL: Az ACL-bejegyzések és a jogosultságbitek összehasonlítása

Maszk nélküli minimális ACL esetén a csoport osztály jogosultságai a tulajdonoscsoport ACL-bejegyzésre vannak leképezve. (Lásd: Minimális ACL: Az ACL-bejegyzések és a jogosultságbitek összehasonlítása.) Maszkkal rendelkező, kiterjesztett ACL – esetén a csoportosztály jogosultságai a mask bejegyzésnek vannak megfeleltetve. Ez a következő ábrán látható: Kiterjesztett ACL: Az ACL-bejegyzések és a jogosultságbitek összehasonlítása.

Kiterjesztett ACL: Az ACL-bejegyzések és a jogosultságbitek összehasonlítása

Ez a leképezési módszer biztosítja az alkalmazások zökkenőmentes együttműködését az ACL-támogatás alkalmazásától függetlenül. A jogosultságbitek által megadott hozzáférési jogosultságok jelentik az ACL-lel megadott további »finombeállítások« felső korlátját. Az ACL tükrözi a jogosultságbitek módosítását és fordítva.

Hozzáférési ACL-lel rendelkező könyvtár

A hozzáférési ACL-ek kezelését a jobb oldali ábra mutatja be.

Könyvtár létrehozása előtt az umask parancs segítségével adja meg, hogy a fájlobjektumok létrehozásakor mely hozzáférési jogosultságokat kell maszkolni. Az umask 027 az alapértelmezett jogosultságot úgy állítja be, hogy a tulajdonosnak az összes jogosultságot biztosítja (0), a csoport írási jogosultsága le van tiltva (2), az egyéb felhasználók pedig semmilyen jogosultsággal nem rendelkeznek (7). Az umask ténylegesen maszkolja a megfelelő jogosultságbiteket vagy kikapcsolja őket. Részletes leírást a megfelelő kézikönyvoldal tartalmaz (man umask).

Az mkdir mydir létrehozza a mydir könyvtárat az umask által megadott alapértelmezett jogosultságokkal. Az ls -dl mydir parancs segítségével ellenőrizhető, hogy az összes jogosultság megfelelően lett-e megadva. A példa kimenete:

drwxr-x--- ... tux project3 ... mydir

A getfacl mydir parancs segítségével ellenőrizze az ACL kezdeti állapotát. Ez az alábbihoz hasonló kimentet eredményez:

# file: mydir
# owner: tux
# group: project3
user::rwx
group::r-x
other::---
     
A getfacl kimenete pontosan tükrözi a jogosultságbitek és az ACL-bejegyzések megfeleltetését (lásd ACL-bejegyzések és fájlmód-jogosultságbitek). Az első három kimeneti sor a könyvtár nevét, tulajdonosát és tulajdonoscsoportját adja meg. A következő három sor a tulajdonos, tulajdonoscsoport és egyéb ACL-bejegyzést tartalmazza. E minimális ACL esetén a getfacl parancs nem állít elő olyan információt, amely az ls segítségével nem lenne látható.

Módosítsa az ACL-t és adjon olvasási, írási és végrehajtási jogosultságot még a geeko felhasználónak és a mascots csoportnak is:

setfacl -m user:geeko:rwx,group:mascots:rwx mydir
A -m}} paraméter hatására a setfacl módosítja a meglévő ACL-t. A következő argumentum a módosítandó ACL-bejegyzéseket jelzi (több bejegyzés vesszővel van elválasztva). Az utolsó rész a könyvtár nevét adja meg, amelyen ezeket a módosításokat végre kell hajtani. A getfacl parancs segítségével megjeleníthető az eredményül kapott ACL.
# file: mydir
# owner: tux
# group: project3
user::rwx
user:geeko:rwx
group::r-x
group:mascots:rwx
mask::rwx
other::---
A geeko felhasználóhoz és a mascots csoporthoz létrehozott bejegyzések mellett egy mask bejegyzés is létrejött. Ez a mask bejegyzés automatikusan beállításra kerül, így az összes jogosultság érvényes. A setfacl parancs automatikusan átalakítja a mask bejegyzéseket a módosított beállításokra, hacsak a -n paraméterrel le nem tiltja ezt a funkciót. A maszk meghatározza a csoport osztályban lévő bejegyzések maximális érvényes hozzáférési jogosultságait. Ez a megnevezett felhasználót, megnevezett csoportot és a tulajdonoscsoportot foglalja magában. Az ls-dl mydir}} paranccsal megjelenített csoportosztály jogosultságbitek mostantól a mask bejegyzésnek felelnek meg.
drwxrwx---+ ... tux project3 ... mydir

A kimenet első oszlopa egy további + jelet tartalmaz, jelezve, hogy az elemhez egy kiterjesztett ACL tartozik.

Az ls parancs kimenetének megfelelően a mask bejegyzés jogosultságai írási hozzáférést is tartalmaznak. Az ilyen jogosultságbitek hagyományosan azt jelentenék, hogy a tulajdonoscsoport (jelen esetben a project3) szintén rendelkezik írási hozzáféréssel a mydir könyvtárhoz. A tulajdonoscsoport érvényes hozzáférési jogosultságai azonban a tulajdonoscsoporthoz és a maszkhoz megadott jogosultságok átfedő részének felelnek meg – amely a mi példánkban r-x (lásd:Hozzáférési jogosultságok maszkolása). Ami a példában levő tulajdonoscsoport érvényes jogosultságát illeti, semmi nem változik az ACL-bejegyzések hozzáadása után sem.

A setfacl vagy chmod parancs segítségével módosítsa a maszk bejegyzést. Használja például a chmod g-w mydir parancsot. Az ls -dl mydir ezután a következőt jeleníti meg:

drwxr-x---+ ... tux project3 ... mydir

A getfacl mydir parancs kimenete a következő:

# file: mydir
# owner: tux
# group: project3
user::rwx
user:geeko:rwx          # effective: r-x
group::r-x
group:mascots:rwx      # effective: r-x
mask::r-x
other::---

Miután a chmod parancs segítségével eltávolította az írási jogosultságot a csoportosztály bitek közül, az ls parancs kimenete elegendő ahhoz, hogy észrevegyük, hogy a mask biteket megfelelően módosítani kell: az írási jogosultság a mydir tulajdonosára van korlátozva. A getfacl kimenete megerősíti ezt. Ez a kimenet az összes olyan bejegyzéshez tartalmaz megjegyzést, amelyben a tényleges jogosultságbitek nem felelnek meg az eredeti jogosultságoknak, mivel ezek a mask bejegyzésnek megfelelően szűrve vannak. Az eredeti jogosultságok a chmod g+w mydir parancs segítségével bármikor visszaállíthatók.

Alapértelmezett ACL-lel rendelkező könyvtár

A könyvtárak rendelkezhetnek egy alapértelmezett ACL-lel. Ez egy speciális ACL, amely megadja, hogy a könyvtár objektumai létrehozásukkor milyen hozzáférési jogosultságokat örökölnek meg. Az alapértelmezett ACL az alkönyvtárakra és fájlokra egyaránt érvényes.

Az alapértemezett ACL hatásai

A könyvtár alapértelmezett ACL-jének jogosultságai kétféleképp kerülhetnek át a könyvtárban található alkönyvtárakra és fájlokra:
  • Az alkönyvtár örökli a szülőkönyvtár alapértelmezett ACL-jét alapértelmezett és hozzáférési ACL-ként egyaránt.
  • A fájl örökli az alapértelmezett ACL-t hozzáférési ACL-ként.

Minden fájlrendszer-objektumot létrehozó rendszerhívás egy mode paramétert használ, amely megadja az újonnan létrehozott fájlrendszer-objektum jogosultságait. Ha a szülőkönyvtár nem rendelkezik alapértelmezett ACL-lel, akkor az umask által megadott jogosultságbitek a mode paraméter által átadott jogosultságokból kerülnek kivonásra, és az eredmény hozzárendelésre kerül az új objektumhoz. Ha a szülőkönyvtár rendelkezik alapértelmezett ACL-lel, akkor az új objektumhoz rendelt jogosultságbitek a mode paraméter jogosultságainak átfedő részének és az alapértelmezett ACL-ben megadottaknak felelnek meg. Az umask paramétert ebben az esetben a rendszer figyelmen kívül hagyja.

Az alapértelmezett ACL-ek alkalmazása

Az alábbi három példa a könyvtárak és az alapértelmezett ACL-ek legjellemzőbb alkalmazásait mutatja be:


Icon-example.png Példa 1.

Az alábbi parancs segítségével adjon hozzá egy alapértelmezett ACL-t a meglévő mydir könyvtárhoz:
setfacl -d -m group:mascots:r-x mydir

A setfacl parancs -d paramétere következtében a setfacl az alábbi módosításokat (-m kapcsoló) hajtja végre az alapértelmezett ACL-en.

A parancs eredménye a következő:
getfacl mydir
# file: mydir
# owner: tux
# group: project3
user::rwx
user:geeko:rwx
group::r-x
group:mascots:rwx
mask::rwx
other::---
default:user::rwx
default:group::r-x
default:group:mascots:r-x
default:mask::r-x
default:other::---
A getfacl a hozzáférési és alapértelmezett ACL-t is visszaadja. Az alapértelmezett ACL-t a default szóval kezdődő sorok alkotják. Annak ellenére, hogy a setfacl parancsot csak az alapértelmezett ACL mascots csoportjának egy bejegyzésére hajtotta végre, a setfacl a hozzáférési ACL összes többi bejegyzését is automatikusan lemásolja egy érvényes alapértelmezett ACL létrehozása érdekében. Az alapértelmezett ACL-ek nincsenek azonnal hatással a hozzáférési jogosultságokra. Csak a fájlrendszer-objektumok létrehozásakor jutnak érvényre. Ezek az objektumok csak a szülőkönyvtár alapértelmezett ACL-jétől örökölnek jogosultságokat.


Icon-example.png Példa 2.
A következő példában az mkdir parancs segítségével a mydir könyvtárban létrehozunk egy alkönyvtárat, amely örökli az alapértelmezett ACL-t.

mkdir mydir/mysubdir

getfacl mydir/mysubdir

# file: mydir/mysubdir
# owner: tux
# group: project3
user::rwx
group::r-x
group:mascots:r-x
mask::r-x
other::---
default:user::rwx
default:group::r-x
default:group:mascots:r-x
default:mask::r-x
default:other::---

A működésnek megfelelően, az újonnan létrehozott mysubdir alkönyvtár a szülőkönyvtár alapértelmezett ACL-jéből származó jogosultságokkal rendelkezik. A mysubdir hozzáférési ACL-je a mydir könyvtár alapértelmezett ACL-jének pontos mása. Az alapértelmezett ACL, amelyet a könyvtár átad az alárendelt objektumoknak, szintén ugyanaz.


Icon-example.png Példa 3.
A touch segítségével hozzon létre egy fájlt a mydir könyvtárban, például így: touch mydir/myfile. Az ls -l mydir/myfile ezután az alábbit jeleníti meg:

-rw-r-----+ ... tux project3 ... mydir/myfile 

A getfacl mydir/myfile kimenete az alábbi:

# file: mydir/myfile
# owner: tux
# group: project3
user::rw-
group::r-x          # effective:r--
group:mascots:r-x   # effective:r--
mask::r--
other::---

A touch az új fájlok létrehozásakor egy 0666 értékű mode paramétert használ, ami azt jelenti, hogy a létrehozott fájlokhoz az összes felhasználó írási és olvasási jogosultságot kap, feltéve, hogy az umask vagy az alapértelmezett ACL nem adnak meg egyéb megszorításokat (lásd Az alapértemezett ACL hatásai). Ez a gyakorlatban azt jelenti, hogy a mode értékben lévő hozzáférési jogosultságok eltávolításra kerültek a megfelelő ACL-bejegyzésekből. Bár a csoportosztály ACL-bejegyzéséből nem kerültek eltávolításra jogosultságok, a maszk bejegyzés módosult, hogy maszkolja a mode paraméterben be nem állított jogosultságokat.

Ez a megközelítés biztosítja az alkalmazások – például a fordítóprogramok – és az ACL-ek zökkenőmentes együttműködését. Létre lehet hozni korlátozott hozzáférési jogosultságú fájlokat, amelyek később végrehajthatóként jelölhetők meg. A mask mechanizmus garantálja, hogy ezeket azután a megfelelő felhasználók és csoportok végrehajthassák.

Az ACL ellenőrzési algoritmusa

Az ellenőrzési algoritmus azelőtt kerül alkalmazásra, hogy a folyamat vagy alkalmazás hozzáférést kapna egy ACL-lel védett fájlrendszer-objektumhoz. Alapszabályként az ACL-bejegyzések az alábbi sorrendben kerülnek megvizsgálásra: tulajdonos, megnevezett felhasználó, tulajdonoscsoport vagy megnevezett csoport és egyéb. A hozzáférés a folyamathoz legjobban megfelelő bejegyzésnek megfelelően kerül kezelésre. A jogosultságok nem halmozódnak.

A dolgok sokkal bonyolultabbá válnak, ha a folyamat több csoporthoz tartozik, és több csoport bejegyzésnek is megfelel. A bejegyzés véletlenszerűen kerül kiválasztásra a szükséges jogosultságokkal rendelkező megfelelő bejegyzések közül. Lényegtelen, hogy mely bejegyzések aktiválják, a végső eredmény: »hozzáférés megadva«. Ehhez hasonlóan, ha egyik megfelelő csoport bejegyzés sem tartalmazza a szükséges jogosultságokat, akkor egy véletlenszerűen kiválasztott bejegyzés aktiválja a végső eredményt: »hozzáférés megtagadva«.

ACL-támogatás az alkalmazásokban

ACL-ek segítségével a modern alkalmazások követelményeinek megfelelő igen összetett jogosultsági helyzetek is leírhatók. A hagyományos jogosultsági alapelv és az ACL-ek jól kombinálhatók. Az alap fájlparancsok (cp, mv, ls, stb.) támogatják az ACL-ek használatát, csakúgy, mint a Samba.

Számos szerkesztő és fájlkezelő továbbra sem kezeli az ACL-eket. A Konqueror használatával történő másoláskor például elvesznek a fájlok ACL-jei. Ha a fájlokat egy szerkesztőben módosítja, akkor a fájlok ACL-jei bizonyos esetekben megőrzésre kerülnek, máskor pedig nem, a szerkesztő által használt mentési módtól függően. Ha a szerkesztő az eredeti fájlba írja a módosításokat, akkor a hozzáférési ACL megőrzésre kerül. Ha a szerkesztő a frissített tartalmat egy új fájlba menti, amely következésképp átnevezi a régi fájlt, akkor az ACL-ek elveszhetnek, hacsak a szerkesztő nem támogatja az ACL-eket. A star archiváló kivételével pillanatnyilag nincs más mentési alkalmazás, amely az ACL-eket megőrzi.

További információ

Az ACL-ekkel kapcsolatos részletes információ a következő címen érhető el: http://acl.bestbits.at/. Lásd még: getfacl(1), acl(5) és setfacl(1) kézikönyvoldala (man).