Az 13.1. táblázat - ACL-bejegyzéstípusok szakasz foglalja össze 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. 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 tulajdonoscsoport bejegyzések által megadott jogosultságokat: azt adja meg, hogy e bejegyzések mely jogosultságai érvényesek é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 (13.2. táblázat - Hozzáférési jogosultságok maszkolása) ezt a mechanizmust illusztrálja.
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 foglal magában. Tartalmaznia kell egy maszk bejegyzést és tartalmazhat több megnevezett felhasználó és megnevezett csoport típust is.
13.1. táblázat - ACL-bejegyzéstípusok
Típus |
Szöveges forma |
---|---|
tulajdonos |
|
megnevezett felhasználó |
|
tulajdonoscsoport |
|
megnevezett csoport |
|
maszk |
|
egyéb |
|
13.2. táblázat - Hozzáférési jogosultságok maszkolása
Bejegyzéstípus |
Szöveges forma |
Jogosultságok |
---|---|---|
megnevezett felhasználó |
|
|
maszk |
|
|
hatályos jogosultságok: |
|
A 13.1. ábra - Minimális ACL: Az ACL-bejegyzések és a jogosultságbitek összehasonlítása és a 13.2. ábra - Kiterjesztett ACL: Az ACL-bejegyzések és a jogosultságbitek összehasonlítása ábrák a minimális és a kiterjesztett ACL-eket ábrázolják. 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 azonban a két esetben eltér.
Minimális – maszk nélküli – ACL esetén a csoport osztály jogosultságai a tulajdonoscsoport ACL-bejegyzésre vannak leképezve. (Lásd: 13.1. ábra - Minimális ACL: Az ACL-bejegyzések és a jogosultságbitek összehasonlítása.) Kiterjesztett – maszkolt – ACL esetén a csoportosztály jogosultságai a mask bejegyzésnek vannak megfeleltetve. Ez a következő ábrán látható: 13.2. ábra - 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.
A parancssori getfacl és setfacl parancsokkal lehet kezelni az ACL-eket. A parancsok használatát az alábbi példa mutatja be.
A 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
parancs 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 az umask kézikönyvoldal tartalmaz.
Az mkdir mydir parancs 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ó kimenetet eredményez:
# file: mydir # owner: tux # group: project3 user::rwx group::r-x other::---
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éseket 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 ne 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:
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 (a 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 határozza meg 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
aranccsal 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 maszkbejegyzé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: 13.2. táblázat - 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 maszkbejegyzé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 maszkbiteket 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 maszkbejegyzé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.
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.
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 vonódnak ki, és az eredmény hozzárendelődik 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 alábbi három példa a könyvtárak és az alapértelmezett ACL-ek legjellemzőbb alkalmazásait mutatja be:
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 új objektumok csak a szülőkönyvtár alapértelmezett ACL-jétől örökölnek jogosultságokat.
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.
A touch parancs 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
parancs 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 13.4.3.1. szakasz - 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 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 csoportbejegyzésnek is megfelel. Egy 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 „hozzáférés megadva” végső eredményt. 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”.