ACL-ek kezeléseACL-ek kezelése

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

user::rwx

megnevezett felhasználó

user:name:rwx

tulajdonoscsoport

group::rwx

megnevezett csoport

group:name:rwx

maszk

mask::rwx

egyéb

other::rwx


13.2. 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-

hatályos jogosultságok:

r--


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

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.

13.1. ábra - Minimális ACL: Az ACL-bejegyzések és a jogosultságbitek összehasonlítása

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

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.

13.2. ábra - 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árHozzáférési ACL-lel rendelkező könyvtár

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.

Alapértelmezett ACL-lel rendelkező könyvtárAlapé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ásaiAz 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 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 alapértelmezett ACL-ek alkalmazásaAz 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:

  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 új objektumok csak a szülőkönyvtár alapértelmezett ACL-jétől örökölnek jogosultságokat.

  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.

  3. 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 ACL ellenőrzési algoritmusaAz 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 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”.