2010. január 21., csütörtök

UNIX-alapú jogosultságkezelés

Ez egy hosszú, fontos és nehéz cikk de az itt leírtak bármilyen UNIX-alapú rendszerre (Apple, FreeBSD, Linux, Minix, stb...) igazak.

Ha nem érted elsőre, ne keseredj el! Majd vissza-vissza térsz, ahogy egyre jobban elmélyedünk a Linuxban, és lassan össze fog állni a kép.

Mint ahogy már írtam, a Linux többfelhasználós rendszer és mint ilyenben, a felhasználók mozgáskörét be kell határolni.
Ezt a UNIX (és így a Linux is) úgy oldja meg, hogy minden fájlhoz hozzárendel egy háromjegyű számot, plusz egy tulajdonost. A háromjegyű számra még visszatérünk, de előbb beszéljünk a tulajdonosról.
A tulajdonos egy felhasználó. Általában az, aki létrehozta a fájlt, de a tulajdonosi jogokat át is lehet ruházni másra.

Azt is tudni kell, hogy minden felhasználónak -így a tulajdonosnak is- van egy csoportja. Ez a csoport a vele egy szinten lévő felhasználókat fogja össze. Például nálunk az egyetemen van egy csoport az alkalmazottaknak, a hallgatónak és persze a rootnak. (employes, students, root) Ez nálunk (a kis kar miatt) elég is, de egy nagy akár cégben minden részlegnek lehet saját csoportja.

A kis kitérő után térjünk vissza a háromjegyű számra!
Tudni kell, hogy az egyes jegyek nem vehetnek fel tetszőleges értékeket. Az értékek 0 és 7 jegy között mozognak. A bináris számrendszerben járatosak ebből már rá is jöhettek arra, hogy ezek 3 bites értékek. Ez nem véletlen, egy ilyen szám ugyanis 3 műveletet engedélyez, vagy tilt.

A három különböző szám pedig azért kell, mert a felhasználókat három csoportra lehet osztani a fájl szemszögéből:
  1. A tulajdonos
    Az ő jogait határozza meg az első szám. Ő az, aki birtokolja a fájlt. A hozzáférési jogokat csak ő (meg persze a root) állíthatja át.
  2. A tulajdonos csoportja
    A második számjegy azon felhasználók jogait határozzák meg, akik a tulajdonossal egy csoportban vannak.
  3. Mindenki más
    A harmadik számjegy az előző két kategóriába nem tartozó felhasználókat jelöli.
Már csak azt kéne tudni, hogy mi az a három tulajdonság, amire ki lehet adni (meg lehet tagadni) valaki(k)nek a jogot.
Ezek a jogok a következők:
  • Olvasási jog (4)
  • írási/módosítási jog (2)
  • Futtatási jog (1)
Az olvasási jog fájl esetén azt jelenit, hogy belenézhetünk a fájlba, kilistázhatjuk a tartalmát.
Az írási/módosítási jog is hasonlóan egyértelmű.
A futtatási jog esetén arra van jogunk, hogy a fájlt futtassuk, amennyiben az egy végrehajtható állomány. (Script vagy bináris)

Könyvtárak esetén a dolog már komplikáltabb.
Az olvasási jog azt jelenti, hogy listázhatjuk a tartalmat. Érdekes, hogy attól, hogy nincs olvasási jogunk, attól még hozhatunk létre benne új fájlt és beleléphetünk.
A fájlok létrehozását, törlését az írási jog szabályozza.
Azt pedig, hogy beleléphetünk-e az adott könyvtárba, a futtatási jog engedi, vagy tiltja meg.

Mondok egy példát, de előtte még fontos tisztázni, hogy miért írtam számokat a jogosultságok után.
Ha te magadnak olvasási és futtatási jogot akarsz adni, akkor be kell állítanod az első számot 4+1=5-ra. Ha csak írásit akarsz, akkor 2-re kell állítanod. Ha 7-es jogod van valamire, akkor azzal mindent szabad (1+2+4=7)

Akkor most végre jöjjön a példa, ami remélhetőleg megérteti a linuxos jogosultségrendszert.

Van az alábbi könyvtárszerkezet: (a nevek után zárójelben a jogaidat szimbolizáló számmal)

home(7)
    |___mydir(1+4=5)
         |___kontener(1)
                |______titok(0)
                |______dokumentumok(1+2+4=7)
                |           |________fájl1(1)
                |           |________fájl2(2)
                |______cuccaim(0)

Legyen a példában a mydir az én home-könyvtáram. A konkéner ezen belül egy mapa, amire neked nem adtam listázási jogot, bár a mappába be tudsz lépni. Listázási jogot azért nem kapsz, hogy ne tudd, hogy ott én még miket tárolok.

 A dokumentumokra neked minden jogod van, így beléphetsz, kilistázhatod a tartalmát, csinálhatsz és törölhetsz benne fájlokat. De a fájl1-et és a fájl2-t nem törölheted, mert nincs rájuk írási jogod. A fájl1-et csak futtathatod, a fájl2-t pedig csak olvashatod. Fontos észrevenni, hogy te csinálhatsz egy fájl3-at a fájl kettő tartalmával, amire adhatsz magadnak futtatási jogokat, és így, még ha nem is közvetlenül, de futtathatod a fájl2-t. Ez azért nem gond, mert fájl2-re valószínűleg azért nincs futtatási jogod, mert nem futtatható.

A jogosultságokat konzolból a chmod parancscsal lehet állítani, de erre még vissza fogok térni a későbbiekben.

A cikk zárásaként néhány példát mutatok, hogy melyik szám mit eredményez.
Újra mondom, amit már az elején elmondtam. Aki nem érti a cikket, ne keseredjen el. Majd menet közben minden világos lesz.

És jöjjenek a példák
  • 777: Mindenkinek szabad mindent
  • 700: A tulajdonos bármit tehet, a többiek semmit
  • 644: A tulajdonos írhatja és olvashatja, a többiek csak olvashatják
    • Például egy jegyzet, vagy egy napló
  • 100: A tulaj csak futtathatja, a többiek semmit sem csinálhatnak vele
    • Ez egy írásvédett futtatható állomány lehet, amit nincs értelme olvasn
  • 000: Senki sem csinálhat vele semmit
    • Sok értelme nincs. (A tulaj és a root természetesen megváltoztathatja.)
  • 007: A csoport és a tulajdonos nem csinálhat semmit, a többiek meg mindet
    • Valószínűleg 700 akart lenni, de el lett cseszve. ;)
  • 466: A tulaj csak olvashatja, a többiek írhatják is
    • Hasznos lehet egy olyan log esetén, amibe a létrehozónak nem kell írnia
  • 611: A tulaj írhatja és olvashatja, a többiek futtathatják
    • Egy olyan script lehet, amit a tulajnak csak szerkesztenie kell, futtatnia nem.
Ennyi példa remélem elég. Csak azt akartam demosntrálni, hogy minden elképzelhető kombináció jó még akkor is, ha néhány egyszerűen értelmetlen. Azt is fontos tisztázni, hogy a jogosultságok megváltoztatásához nem írási jog kell. Ez a tulajdonos (és a root) kiváltsága.

Ha valami nem tiszta, kommentben lehet kérdezni.

Nincsenek megjegyzések:

Megjegyzés küldése