Hozzáférési jogosultságok

E fejezetben a UNIX egyik meghatározó, s a felhasználó munkáját lépten-nyomon érintő jellegzetességével foglalkozunk, nevezetesen a hozzáférési jogosultságokkal (permissions).

Többfelhasználós rendszerekben alapvető fontosságú, hogy az egyes felhasználók saját adatait a lehetőség szerint megvédjük a szándékos vagy szándékolatlan rongálástól, nem is beszélve a magántitok védelméről és más kérdésekről. E célok biztosítására a UNIX egy tulajdonosi kategóriák és tevékenységek szerinti engedélyezési rendszert használ, s ennek alapján dönt az állományokhoz való hozzáférés engedélyezéséről, illetve megtagadásáról.

Mint a 2. fejezetben már láttuk, egy UNIX felhasználót a felhasználói azonosítója (uid) azonosít a rendszerben, ezenfelül minden felhasználó valamilyen csoportba is tartozik, így van egy csoportazonosítója (gid) is. Amikor valamilyen módon hozzá szeretnénk férni egy fájlhoz vagy katalógushoz, a rendszer aszerint sorol be minket, hogy milyen tulajdonosi viszonyban vagyunk az adott fájllal: lehetünk tulajdonosa (azonos uid), lehetünk csoporttagok (azonos gid), vagy "egyéb".

A fájllal kapcsolatos tevékenységek szempontjából három fő csoport van: az állomány olvasása, írása, illetve végrehajtása (katalógus esetében keresése).

A fájlművelet előtt a UNIX megnézi, hogy melyik tulajdonosi kategóriába esünk, s utána azt, hogy ebben a kategóriában engedélyezett-e vagy sem a végrehajtani kívánt művelet.

A hozzáférési jogosultságok az ls -l lista alapján szemléltethetőek a legkönnyebben:

 

$ ls -l

total 364

-rw-rw-rw- 1 demo guest 166262 Aug 23 20:29 FULL-INDEX

-rw-rw-rw- 1 demo guest 18 Aug 23 20:42 file1

drwxrwxrwx 3 demo guest 1024 Aug 23 20:59 newdir

-rw-rw-rw- 1 demo guest 18 Aug 23 20:42 newfile

-rw-rw-rw- 1 demo guest 18 Aug 23 20:43 newfilee2

lrwxrwxrwx 1 demo guest 20 Aug 23 23:14sendmail.cf ->
/usr/lib/sendmail.cf

-rw-rw-rw- 2 demo guest 18 Aug 23 20:59 text

A megjelenített lista baloldali oszlopa tartalmazza a hozzáférési jogosultságokat. Az oszlop legszélső mezője a fájltípust kódolja, az alábbiak szerint:

 

- közönséges fájl

d katalógus

p speciális cső (pipe)

l szimbolikus link

c karakteres készülékmeghajtó (device driver)

b blokkos készülékmeghajtó

A következő kilenc karakter tartalmazza, háromszor hármas bontásban, a hozzáférési jogosultságokat. Ha egy művelet engedélyezett, a neki megfelelő betű látszik a listán, ha nem, a '-' karakter jelzi a tiltást. Az 'r' az olvasás (read), a 'w' az írás (write), az 'x' pedig a végrehajtás (execute) jele (más karakterek is szerepelhetnek itt, néhányról hamarosan lesz szó). Az első hármas csoport a tulajdonos, a második a csoport, végül a harmadik a többiek jogosultságait mutatja. Konkrét példát véve, a fenti listán szereplő file1 egy közönséges fájl ('-' karakterrel kezdődik a lista), amit a tulajdonosa írhat és olvashat, de nem hajthat végre (rw-), s ugyanezen jogokkal bírnak a csoporttagok és a többiek is (Nem túl gyakori beállítás, főleg biztonsági megfontolások miatt!) Másik példa: a newdir egy katalógusfájl ('d' betűvel kezdődik a lista), amelyet tulajdonosa írhat, olvashat és 'végrehajthat' (rwx), s ugyanezek a jogai a csoporttagoknak, valamint bárki másnak is.

Itt álljunk meg egy pillanatra; közönséges fájloknál eléggé magától értetődő az olvasás-írás-végrehajtás fogalma, katalógusnál már nem annyira. Egy közönséges fájl olvasható, ha mondjuk a cat paranccsal ki tudjuk listázni, írható, ha például az ed paranccsal módosíthatjuk, s végrehajtható, ha el tudjuk indítani, s a rendszer értelmezi a benne lévő információkat.

Egy katalógus olvasása azt jelenti, hogy az erre a célra szolgáló paranccsal (ls) olvashatjuk a katalógusfájlt, azaz láthatjuk a benne lévő bejegyzéseket. Egy katalógus akkor írható, ha az erre a célra szolgáló parancsokkal (mkdir, rmdir, mv, cp, rm, ln) bejegyzéseket tudunk létrehozni, módosítani, vagy törölni a katalógusfájlban, illetve törölhetjük/létrehozhatjuk magát a katalógusfájlt. A végrehajtást pedig ez esetben keresésnek kell értelmezni - egy katalógusfájl kereshető, ha a shell egy végrehajtható fájlt megkereshet és elindíthat az adott katalógusfájlból. Ez a jog látszólag hasonló az olvasáshoz, de lényeges különbség van köztük. Legjobban talán egy példán tudjuk szemléltetni: tegyük fel, hogy van egy prog nevű végrehajtható programunk, ami egy olyan katalógusban szerepel, amelyikre engedélyezett az olvasás, de nem engedélyezett a keresés (r--). Ebben az esetben magát a katalógust látjuk ugyan a kilistázáskor, de a benne lévő fájlokat nem. Ehelyett hibaüzeneteket kapunk, akárcsak akkor, ha a végrehajtható fájlt megpróbáljuk elindítani. (Hasonlóképp, ha cd parancsot se tudjuk ilyenkor végrehajtani). Ha a katalógus nem olvasható, de kereshető (--x), akkor az ls paranccsal nem fogjuk látni az állományt, de ha elindítjuk, végre fog hajtódni.

Hozzáférési jogosultságok módosítása: chmod parancs

A hozzáférési jogok módosítása egyrészről a fenti csoportokra vonatkozó jogosultságok módosítását jelenti (például írásvédelem), másfelől ide tartozik az állomány tulajdonosának, illetve csoportjának megváltoztatása is.

A hozzáférési jogosultságok a chmod paranccsal állíthatóak. E parancsnak két használati módja van, az új jogosultságokat mind oktálisan, mind szimbolikus módon be lehet állítani.

Oktális megadás esetén a parancs valahogy így néz ki:

chmod [-R] perm-mode file ...

ahol perm-mode a beállítandó új hozzáférési jogosultság. Itt is több fájlnevet lehet megadni szükség szerint. (A -R opcióval rekurzív módon, a megadott katalógus alatti teljes állományrendszeren módosítja a jogosultságokat.) A beállítandó jogokat oktális szám formájában kell megadni, az alábbiak szerint: az olvasás értéke 4, az írásé 2, a végrehajtásé 1, ezeket az értékeket össze kell adni, és így tulajdonosi kategóriánként képződik három oktális számjegy, ezeket kell beírni. Ha például azt akarjuk, hogy a file1 fájlunkat a tulajdonos tudja olvasni, írni, végrehajtani, a csoporttagok végrehajtani és olvasni, a többiek pedig csak olvasni, akkor a jogosultságok kódolása 4+2+1, 4+1, 4, azaz 754 lesz:

 

$ chmod 754 file1

$ ls -l file1

-rwxr-xr-- 1 demo guest 18 Aug 23 20:42 file1

$

A másik megadási mód a szimbolikus beállítás, ennek a következő a szintaxisa (a szóköz csak a láthatóság miatt szerepel):

 

chmod [-R] who op perm file ...

ahol who a tulajdonosi kategóriát adja meg, lehetséges értékei 'u' (tulajdonos, user), 'g' (csoport, group), 'o' (egyéb, others), illetve 'a' (mindenki, all), ami az előző hármat magában foglaló alapértelmezés.

perm a megfelelő művelet, 'rwx' lehet a már látott módon.

op értéke +-= lehet. '+' a megfelelő jog engedélyezését jelenti, '-' a jog letiltását, '=' pedig a jog abszolút értékre állítását. Néhány példa:

 

$ ls -l file1

-rw-rw-rw- 1 demo guest 18 Aug 23 20:42 file1

$ chmod 754 file1

$ ls -l file1

-rwxr-xr-- 1 demo guest 18 Aug 23 20:42 file1

$ chmod u-w file1 # tulajdonosnak írásvédett

$ ls -l file1

-r-xr-xr-- 1 demo guest 18 Aug 23 20:42 file1

$ chmod a+x file1 # mindenkinek végrehajtható

$ ls -l file1

-r-xr-xr-x 1 demo guest 18 Aug 23 20:42 file1

$

Az alábbi példán az abszolút értékre állítás látható. Normálisan, egy csoportban a '+', illetve a '-' beállítás csak a megnevezett tevékenységet engedélyezi, illetve tiltja, például +w beállítás engedélyezi az írást, de a többi jogot nem változtatja meg. Abszolút értékes megadás esetén a chmod parancs az expliciten nem említett jogokat lenullázza. Alábbi példánkban a tulajdonos olvasási és írási joga engedélyeződik, de a nem szabályzott végrehajtási jog letiltódik:

 

$ chmod u=rw file1

$ ls -l file1

-rw-r-xr-x 1 demo guest 18 Aug 23 20:42 file1

$

A hozzáférési jogosultságok kezelése, mivel az inode rekordban törtnik, biztosítja azt is, hogy egy állomány hozzáférési jogait csak a tulajdonos tudja állítani, még abban az esetben is, ha maga az állomány mások számára is írható.

Tulajdonos- és csoportváltás: chown, chgrp

Lehetőségünk van arra, hogy az általunk birtokolt állomány tulajdonosát és csoportját megváltoztassuk. Ez a chown, illetve a chgrp paranccsal történik.

 

$ chgrp staff file1

$ ls -l file1

-rw-r-xr-x 1 demo staff 18 Aug 23 20:42 file1

$ chown janos file1

$ ls -l file1

-rw-r-xr-x 1 janos staff 18 Aug 23 20:42 file1

$

E két parancs használatakor egyet ne felejtsünk: ha egy állomány tulajdonosi jogait átadtuk, akkor a továbbiakban azt mi nem vehetjük vissza, csak az új tulajdonos dönthet így.

Másodlagos csoportok

A UNIX újabb verziói lehetőséget biztosítanak arra is, hogy egy felhasználó több csoportba is tartozhasson. E másodlagos csoportokat a rendszergazdának kell beírnia a megfelelő konfigurációs fájlba (/etc/group). Amikor csoportot szeretnénk váltani, a newgrp newgroupname parancsot kell kiadnunk. Ha newgroupname számunkra engedélyezett csoport, akkor a következő newgrp parancs kiadásáig az új csoportban leszünk, az annak megfelelő hozzáférési jogokkal, s az újonnan létrehozott fájljaink is ebbe a csoportba fognak tartozni. A paraméter nélkül kiadott newgrp parancs visszahelyez minket az elsődleges csoportunkba.

A másodlagos csoportok a csoportmunkák támogatásánál előnyösek. Így lehetőség nyílik arra, hogy valaki elsődlegesen a saját csoportjába tartozzék, de minden egyes projekt, amelyben résztvesz, külön másodlagos csoportként szerepeljen, s az e projekthez tartozó fájlokhoz csak az e másodlagos csoporthoz tartozók férjenek hozzá.

Gyakorlati példa: a passwd program

Az alábbiakban egy igencsak életszagú példán mutatjuk be a hozzáférési jogosultságok használatát, mégpedig a jelszavak megváltoztatását végző passwd programon.

A passwd program szolgál arra, hogy a felhasználók megváltoztathassák saját belépési jelszavukat. (A parancs használata igen egyszerű, a felhasználónak csak a passwd szót kell begépelni, a parancs kéri a régi jelszót, majd kétszer egymás után be kell gépelni az újat, s a legközelebbi belépéskor már ezt kéri a rendszer.)

A UNIX a jelszavakat - számos más információval együtt - a /etc/passwd fájlban tárolja. Mivel az ebben a fájlban tárolt információk biztonsága létfontosságú az egész rendszer biztonsága szempontjából, ugyanakkor számos olyan információt is tartalmaz, amelyekre a különböző programoknak szükségük van, e fájl tulajdonosa a root, s a hozzáférési jogok rendszerint rw-r--r-- beállításúak, azaz a rendszergazda írni és olvasni tudja a fájlt, mindenki más csak olvasni. A kérdés ezek után az, hogy ha a fájlt csak a rendszergazda tudja módosítani, akkor hogyan oldható meg az, hogy ha egy "mezei felhasználó" futtatja a passwd programot, akkor meg tudja változtatni a saját jelszavát, amihez nyilvánvalóan a passwd fájl módosítása kell? E problémára a set-uid mechanizmus használata nyújt megoldást.

 

$ ls -l /bin/passwd /etc/passwd

-r-sr-sr-x 1 root sys 22208 Mar 27 15:21 /bin/passwd

-rw-r--r-- 1 root sys 477 Aug 18 16:58 /etc/passwd

$

Ha megnézzük a /etc/passwd adatfájl, és a passwd program végrehajtási jogait, egy eddig még nem látott hozzáférési beállítás szerepel a passwd programnál, mégpedig egy s betű a tulajdonos és a csoport jogoknál. Ez az s a set-uid (set user-id) jog engedélyezését jelzi, ha a tulajdonosi kategóriánál szerepel, illetve a set-gid (set group-id) jogot, ha a csoport kategóriában. Ha e jog engedélyezett, akkor akárki is futtatja a szóbanforgó programot, a futtatás idejére olyan jogokkal fog rendelkezni, mint a program tulajdonosa (illetve mint a programmal egy csoportban lévő bármely felhasználó).

Esetünkben ez azt jelenti, hogy ha "mezei felhasználó" kiadja a passwd parancsot, akkor a parancs olyan jogokkal fut le, mintha a tulajdonosa, azaz a root futtatta volna le. Mivel viszont a passwd fájlt a root módosíthatja, "mezei felhasználó" ki tudja cserélni jelszavát; a passwd programból való kilépésekor elveszti különleges jogait, azok csak a passwd parancs futása alatt éltek.

A fenti módszer kiválóan alkalmas arra, hogy ellenőrzött körülmények között privilégizált jogokat adjanak a felhasználók kezébe, de éppen ezért különleges óvatossággal is kell eljárni, ha egy programot set-uid jogosítványokkal akarunk ellátni; rosszul működő, hibás program katasztrófákat okozhat a rendszerben, ha mindenki nyakra-főre superuser jogosítványokkal használja.

 

Tartalomjegyzék