POSIX ACL
Hagyományosan, azok a rendszerek, melyek támogatják a POSIX (Portable Operating System Interface) szabványokat egy egyszerű, de mégis hatékony fájljogosultsági modellt alkalmaznak. Minden fájlhoz megadnak három jogosultsághalmazt és a jogosultságokat a három felhasználótípus kaphatja, eszerint különböző jogokkal rendelkezhet a fájl tulajdonosa, a fájl tulajdonosának csoportja és az összes többi felhasználó. A három jogosultsághalmaz az olvasás (r) írás (w) és végrehajtás (x). Az így kapott jogokat, minden fájl illetve könyvtár esetében, kilenc biten tudjuk tárolni. Megadható ezen felül a felhasználói azonosító beállítása (set user id), a csoportazonosító beállítása (set group id) és a ragadós (sticky) bit is. Az összetett feladatok ellátására ez a modell nem biztosított elég lehetőséget, ezért indították a POSIX 1003.1 fejlesztését és így született meg az ACL (Access Control List).
1 Hozzáférési ACL
A hagyományos POSIX fájlrendszer-objektum jogosultsági modellje három osztályba sorolja a felhasználókat, a tulajdonos, a csoport és a többiek. Minden csoporthoz hozzárendel jogosultsághalmazokat. 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. Az ls -l paranccsal tudjuk kiíratni a felhasználói osztályok jogosultságait. Az ACL bejegyzések halmazából áll. Minden fájlrendszer-objektum jogának van egy ACL-es helyettesítése is. Bármely a három osztályból vett felhasználót egy ACL bejegyzés helyettesíti. A többi felhasználó vagy csoport mind külön bejegyzést foglal el.
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. Ennek ugyebár csak három bejegyzése van, azokat az ACL-eket, melyek ennél többet tartalmaznak, kiterjeszett ACL-eknek hívjuk. Ezek tartalmaznak egy mask bejegyzést illetve megnevezett felhasználókat és csoportokat is.
A következőképpen épülnek fel az ACL bejegyzések típusai. Minden bejegyzés tartalmazza, hogy melyik felhasználóra vagy csoportra érvényes önmaga illetve azt, hogy milyen jogokkal rendelkezik, az adott osztályban.
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</pre> |
ACL-bejegyzéstípusok |
Ezek a megnevezett csoport és megnevezett felhsználói bejegyzések mind a csoport osztály alá tartoznak ami már tartalmazza a tulajdonoscsoport bejegyzést. Eltérően a POSIX.1 jogosultsági modelltől a csoport osztály tartalmazhat ACL bejegyzéseket különböző jogosultsághalmazokkal így önmagában a csoport osztály jogosultságai nem kell, hogy megmutassák az összes ACL bejegyzés részletes jogait. Ezzel a csoport osztály jogait egy felső korlátként értelmezhetjük, amelyet a csoport osztály bármely bejegyzése garantálni fog. Ez a felső határ lehetővé teszi, hogy a POSIX.1-es alkalmazások, melyek nem ismerik az ACL-t, nem fognak hirtelen extra jogokat biztosítani amikor az ACL elérhetővé válik. A minimális ACL-eknél a csoport (group) osztály jogai megegyeznek a tulajdonoscsoport jogaival. Ezzel szemben a kiterjeszett ACL-eknél a csoport (group) osztály tartalmazhatja egyéb felhasználók és csoportok bejegyzéseit is. Ennek lényeges problémája, hogy ezek a bejegyzések tartalmazhatnak olyan jogokat, melyekkel a tulajdonoscsoport nincs felruházva, tehát a tulajdonoscsoport (owning group) bejegyzésében található jogok eltérnek a csoport (group) osztály jogaitól. Ennek elkerülése miatt vezették be az úgynevezett mask bejegyzést. A minimális ACL-ekkel a csoport osztály jogai megegyeztek a tulajdonoscsoport bejegyzésének jogaival, míg a kiterjeszett ACL-eknél a csoport osztály jogai a mask bejegyzés jogaival egyeznek meg.
tulajdonos | user::rw- | → | rw- | tulajdonos osztály |
tulajdonoscsoport | group::r-- | → | r-- | csoport osztály |
egyéb | other::--- | → | ||
egyéb osztály | ||||
Minimális ACL |
---|
tulajdonos | user::rwx | → | rwx | tulajdonos osztály |
megnevezett felhasználó | user:név:rw- | |||
tulajdonoscsoport | group::r-- | |||
maszk | mask::rw- | → | rw- | csoport osztály |
egyéb | other::--- | → | ||
egyéb osztály | ||||
Kiterjesztett ACL |
---|
Kiterjeszett ACL-ek esetében a mask bejegyzésnek és a csoport osztály egy tagjának a bejegyzésének is tartalmaznia kell egy adott jogot ahhoz, hogy az ténylegesen is érvényesüljön. A csoport osztályba nem tartozik bele a tulajdonos és a többiek bejegyzése, az ő jogaik nincsenek maszkolva.
Típus | Szöveges forma | Jogok | megnevezett felhasználó | user:név:rw- | r-x |
---|---|---|---|---|---|
mask | mask::rw- | rw- | |||
Tényleges jogok | r-- |
Ha egy alkalmazás (például a chmod segítségével) megváltoztatja a tulajdonos, csoport vagy az egyéb osztály jogait, akkor a megfelelő ACL bejegyzés is megváltozik. Hasonlóan amikor egy alkalmazás megváltoztatja egy ACL bejegyzés jogait ami az egyik osztályra mutat, akkor az osztály jogai megváltoznak.
2 Típusok
Hozzáférési ACL Alapértelmezett ACL egy fájlrendszerobjektum jogait úgy adja meg, hogy a létrehozásakor, a saját szülőkönyvtára jogait örökíti a fájlrendszerobjektumra. Ezekhez az ACL-ekhez csak könyvtárakat társíthatunk. Ha egy könyvtárba egy újabb könyvtárat hozunk létre, akkor a szülőkönyvtár úgy örökíti az alapértelmezett ACL-jét, hogy azt új könyvtár alapártelmezett és hozzáférési ACL-ként is átveszi. Ha egy fájlobjektumot hozunk létre akkor az az alapértelmezett ACL-t hozzáférési ACL-ként örökli.
Mode paraméter Új könyvtár vagy fájl létrehozásakor, az örökölt hozzáférési ACL-ek jogait tovább módosítja a mode paraméter. A mode kilenc paramátert tartalmaz, ami a tulajdonos, a csoport és a többiek osztály jogait tárolja. A tényleges jogokat az ACL és a mode AND kapcsolataként értelmezhetjük. Ha a szülőkönyvtárnak nincs alapértelmezett ACL-je, az új fájl jogai a POSIX.1 alapján kerülnek kiosztásra. A fájl tényleges jogait úgy kapjuk, hogy a mode jogaiból kivesszük az umask jogait. Ha létezik alapértelmezett ACL akkor az umask paraméreteit a rendszer figyelmen kívül hagyja.
3 Hozzáfárást ellenőrző algoritmus
Amikor egy folyamat megpróbál hozzáférni egy fájlobjektumhoz, akkor először kiválasztja azt az ACL-t ami leginkább megegyezik a folyamat jogaival, majd leellenőrzi, hogy a bejegyzés tartalmazza-e a kellő jogokat. Egy folyamat több mint egy csoportnak lehet tagja, tehát több mint egy csoport bejegyzésére lehet igaz, hogy tartalmazza a megfelelő jogokat.