POSIX ACL

A Unix/Linux szerverek üzemeltetése wikiből
A lap korábbi változatát látod, amilyen Sjrextor (vitalap | szerkesztései) 2009. december 21., 00:59-kor történt szerkesztése után volt.

(eltér) ←Régebbi változat | Aktuális változat (eltér) | Újabb változat→ (eltér)

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.

Személyes eszközök