A FreeBSD, mivel a BSD UNIX® egyik közvetlen leszármazottja, számos UNIX®-os alapötletre épül. Ezek közül az első és talán a leginkább kihangsúlyozott, hogy a FreeBSD egy többfelhasználós operációs rendszer. Egy olyan rendszer, amely egyszerre több, egymástól független feladattal foglalkozó felhasználót képes kiszolgálni. A rendszer felelős a hardveres eszközök, a különféle perifériák, a memória és a processzor idejének minden egyes felhasználó számára szabályos és pártatlan megosztásáért és a feléjük irányuló kérések szervezéséért.
Mivel a rendszer több felhasználót is képes támogatni, az általa kezelt erőforrások rendelkeznek engedélyek egy adott halmazával, amelyek eldöntik, ki tudja ezeket olvasni, írni és végrehajtani. Az engedélyek háromszor három bit formájában jelennek meg, amelyek közül az első bitcsoport az állomány tulajdonosára, a második az állomány csoportjára, végül az utolsó pedig a mindenki másra vonatkozó engedélyeket tárolja.
Érték | Engedély | Könyvtárlistában |
---|---|---|
0 | Nem olvasható, nem írható, nem hajtható végre | --- |
1 | Nem olvasható, nem írható, végrehajtható | --x |
2 | Nem olvasható, írható, nem hajtható végre | -w- |
3 | Nem olvasható, írható, végrehajtható | -wx |
4 | Olvasható, nem írható, nem hajtható végre | r-- |
5 | Olvasható, nem írható, végrehajtható | r-x |
6 | Olvasható, írható, nem hajtható végre | rw- |
7 | Olvasható, írható, végrehajtható | rwx |
A ls(1) -l
kapcsolójának
segítségével megnézhetjük a
könyvtárak tartalmának részletes
listáját, amiben megjelennek az
állományok tulajdonosaira, csoportjára
és a mindenki másra vonatkozó
engedélyek is. Például ezt láthatjuk,
ha kiadjuk az ls -l
parancsot egy
tetszőleges könyvtárban:
%
ls -l
total 530
-rw-r--r-- 1 root wheel 512 Sep 5 12:31 egyik
-rw-r--r-- 1 root wheel 512 Sep 5 12:31 masik
-rw-r--r-- 1 root wheel 7680 Sep 5 12:31 e-mail.txt
...A példabeli ls -l
parancs
kimenetének első oszlopa így bomlik fel:
Az első (bal szélső) karakter mondja meg,
hogy ez egy hagyományos állomány,
könyvtár, speciális karakteres eszköz,
socket vagy bármilyen más különleges
pszeudoállomány. Ebben az esetben a
-
jelzi, hogy egy hagyományos
állományról van szó. A
következő három karakter, ami ebben a
példában az rw-
, adja meg az
állomány tulajdonosának engedélyeit.
Az ezután következő három karakter, az
r--
mutatja az állomány
csoportjának engedélyeit. Az utolsó
három karakter, vagyis itt az r--
adja
meg a többiek engedélyeit. A kötőjel arra
utal, hogy az adott engedélyű
tevékenység nem engedélyezett. Tehát
ennél az állománynál az
engedélyek a következőek: a tulajdonosa tudja
olvasni és írni, a csoportja csak olvasni tudja,
ugyanígy bárki más. A fenti
táblázatnak megfelelően az
állomány engedélyének kódja
644
lesz, ahol az egyes számjegyek
jelentik az állomány engedélyeinek
három elemét.
Ez mind szép és jó, de vajon a rendszer
milyen módon kezeli az állományok
engedélyeit? A FreeBSD a legtöbb hardveres eszközt
állománynak tekinti, amelyeket a programok meg
tudnak nyitni, tudnak róluk olvasni és adatokat
tudnak kiírni rájuk pontosan úgy, mint
bármilyen más állomány esetén.
Ezeket a speciális állományokat a
/dev
könyvtárban
találjuk.
A könyvtárakat is állományokként kezeli, ezért azok is rendelkeznek olvasási, írási és végrehajtási engedélyekkel. Azonban a könyvtárak végrehajtását engedélyező bit némileg más jelentéssel bír, mint az állományok esetén. Amikor ugyanis egy könyvtárat végrehajthatónak jelölünk meg, az arra fog utalni, hogy bele tudunk lépni, vagyis hogy ki tudjuk rá adni a „könyvtárváltás” (cd, change directory) parancsát. Ez továbbá arra is utal, hogy az ismert nevű állományokhoz hozzá tudunk férni (természetesen az egyes állományok engedélyeinek megfelelően).
A könyvtárak tartalmát ennek megfelelően viszont csak úgy láthatjuk, ha olvasási engedéllyel rendelkezünk a könyvtárra, míg egy általunk ismert állomány törléséhez a tartalmazó könyvtárhoz kell írási és végrehajtási engedélyekkel rendelkeznünk.
Ezeken kívül még léteznek további engedélyek is, de ezeket csak olyan különleges esetekben használják, mint például a felhasználóváltó programok (setuid program) vagy a ragadós könyvtárak (sticky directory) létrehozása. Az állományok engedélyeinek behatóbb megismeréséhez és beállításához mindenképpen nézzük át a chmod(1) man oldalt.
A szimbolikus engedélyek (gyakran csak szimbolikus kifejezések) az állományok és könyvtárak engedélyeinek megadása során a számok helyett karaktereket használnak. A szimbolikus kifejezések (ki) (hogyan) (milyen engedélyt) alakúak, ahol az alábbi értékek adhatóak meg:
Elem | Betű | Jelentése |
---|---|---|
(ki) | u | tulajdonos |
(ki) | g | csoport tulajdonos |
(ki) | o | egyéb |
(ki) | a | mindenki (a „világ”) |
(hogyan) | + | engedély megadása |
(hogyan) | - | engedély visszavonása |
(hogyan) | = | engedély explicit beállítása |
(milyen engedély) | r | olvasás |
(milyen engedély) | w | írás |
(milyen engedély) | x | végrehajtás |
(milyen engedély) | t | ragadós (sticky bit) |
(milyen engedély) | s | UID vagy GID állítása |
Ezek az értékek a chmod(1) paranccsal az
eddigiekhez hasonló módon
használhatóak, csak itt betűket kell
megadnunk. Például az alábbi paranccsal
akadályozhatjuk meg, hogy a tulajdonosán
kívül bárki hozzáférhessen az
ÁLLOMÁNY
nevű
állományhoz:
%
chmod go= ÁLLOMÁNY
Amennyiben egy állománnyal kapcsolatban több változtatást is el kívánunk végezni, össze tudjuk ezeket fűzni egy vesszőkkel elhatárolt felsorolásban:
%
chmod go-w,a+x ÁLLOMÁNY
A korábban tárgyalt engedélyek mellett még a FreeBSD ismeri az ún. „állományjelzők” (file flags) beállítását is. Ezek a jelzőbitek egy további biztonsági és irányítási szintet nyújtanak az állományok felett, viszont a könyvtárakra nem vonatkoznak.
Ezek az állományjelzők az
állományok felett további
vezérlést adnak a kezünkbe, aminek
révén gondoskodhatunk róla, hogy
akár még a root
felhasználó (a rendszer adminisztrátora) se
legyen képes állományokat
eltávolítani vagy módosítani.
Az állományjelzők értékei
egy egyszerű felületen keresztül, a
chflags(1) segédprogrammal
változtathatóak meg. Például a
következő paranccsal állíthatjuk a
rendszer törölhetetlen (undeletable)
jelzését az allomany1
állományon:
#
chflags sunlink allomany1
A törölhetetlen jelzés eltávolításához egyszerűen csak írjuk be az előző parancsot úgy, hogy a „sunlink” paraméter elejére még beszúrunk egy „no” szövegrészt. Így:
#
chflags nosunlink allomany1
Az állományokra éppen
érvényes jelzéseket az ls(1) parancs
-lo
kapcsolójának
segítségével jeleníthetjük
meg:
#
ls -lo file1
Ennek megfelelően az eredménynek valahogy így kellene kinéznie:
Sok jelzés csak a root
felhasználón keresztül vehető fel vagy
távolítható el. Más esetekben
viszont az állomány tulajdonosa
állíthatja ezeket. A rendszergazdáknak
javasoljuk, hogy ezzel kapcsolatban a chflags(1) és
chflags(2) man oldalakat tanulmányozzák
át.
A korábban említett engedélyeken
kívül létezik még további
három, amelyekkel minden rendszergazdának illik
tisztában lennie. Ezek név szerint a
setuid
, setgid
és
sticky
típusú
engedélyek.
Ezek a beállítások bizonyos UNIX® műveletek esetén nagyon fontosak, mivel az átlagos felhasználók számára általában el nem érhető funkciók használatát támogatják. A megértésükhöz elsőként a felhasználók valódi és effektív azonosítója közti különbségeket kell tisztáznunk.
A valódi azonosító
tulajdonképpen az a felhasználói
azonosító, amellyel a programot indítjuk el
vagy futás előtt birtokoljuk. A program
futása közben azonban az effektív
felhasználói azonosítóval fut.
Például a passwd(1) segédprogram a
jelszavát megváltoztatni
kívánó felhasználó
valódi azonosítójával indul,
miközben a jelszavakat tároló
adatbázis elérésékor már a
root
felhasználó
effektív azonosítójával fut.
Ezáltal a privilégiumokkal nem rendelkező
felhasználók is meg tudják
anélkül változtatni a jelszavaikat, hogy a
Permission Denied hibaüzenettel
találkoznának.
A mount(8) nosuid
beállításával azonban az ilyen
típusú binárisok minden
különösebb jel nélkül
csődöt fognak mondani. Mellesleg a mount(8)
man oldala szerint ez az opció nem is teljesen
megbízható, mivel nosuid
wrapperek segítségével meg lehet
kerülni.
Ahogy azt az alábbi példa is szemlélteti, a setuid engedélyt a többi elé egy négyes (4) beszúrásával tudjuk beállítani:
#
chmod 4755 suidexample.sh
A
állomány engedélyei ezt követően
már így fognak megjelenni:suidexample.sh
Most már jól látható, hogy az
állomány tulajdonosához tartozó
engedélyek között a
végrehajthatóságot szabályozó
bit lecserélődött egy s
bitre. Ennek köszönhetően a
passwd
parancshoz hasonló módon
kibővített engedélyekkel leszünk
képesek futtatni programokat.
Két terminál megnyitásával
mindezt valós időben is megvizsgálhatjuk. Az
egyiken indítsuk el normál
felhasználóként a passwd
programot. Miközben a program várakozik az
új jelszó megadására, a másik
terminálon kérdezzük le a programhoz
tartozó felhasználói
információkat.
Tehát az egyik terminálon a következőt látjuk:
%
passwd
Changing local password for trhodes
Old Password:Eközben pedig a másikon:
#
ps aux | grep passwd
trhodes 5232 0.0 0.2 3420 1608 0 R+ 2:10AM 0:00.00 grep passwd
root 5211 0.0 0.2 3620 1724 2 I+ 2:09AM 0:00.01 passwdA passwd
parancsot egyszerű
felhasználóként adtunk ki, azonban
jól látható, hogy valójában a
root
felhasználó
azonosítójával fut.
A setgid
a setuid
engedélyhez hasonlóan működik,
egyedül annyiban tér el, hogy a csoportra
vonatkozó beállításokat
módosítja. Amikor egy alkalmazást vagy
segédprogramot ilyen engedéllyel futtatunk, akkor
az adott programot birtokló csoport engedélyeit
kapjuk meg.
Úgy tudjuk állományokon
beállítani a setgid
típusú engedélyt, ha az iménti
példához hasonlóan a
chmod
parancs hívásakor
még egy kettest (2) írunk az engedélyek
elé:
#
chmod 2755 sgidexample.sh
Az így beállított engedélyek az
előbbihöz hasonló módon
szemlélhetőek meg, azonban ebben az esetben a
csoporthoz tartozó engedélyeknél jelenik
meg az s
bit:
Az előbb tárgyalt példákkal kapcsolatban fontos megemlítenünk, hogy habár a szkriptek is végrehajtható állományok, nem fognak a valóditól eltérő effektív felhasználói azonosítóval futni. Ennek oka abban keresendő, hogy a parancssori szkriptek nem hívhatják a setuid(2) rendszerhívást.
Ez a két speciális engedély (a
setuid
és a setgid
) a
programhoz tartozó engedélyek
kiterjesztésével csökkentheti
rendszerünk biztonságát. Ezzel szemben
viszont a harmadik bemutatandó speciális
engedély rendszerünk védelmének
erősítésére szolgál: ez az
ún. sticky
bit.
Ha a sticky
típusú
engedélyt könyvtárra adjuk meg, akkor a benne
levő állományok törlését
kizárólag azok tulajdonosainak engedi. Ezzel az
engedéllyel lényegében a /tmp
könyvtárhoz
hasonló nyilvános, bárki által
elérhető könyvtárakban
akadályozhatjuk meg az állományok idegen
felhasználók általi
törlését. Az engedély
beállításához egy egyest (1) kell a
többi elé fűznünk, mint
például:
#
chmod 1777 /tmp
Most már az ls
parancs
segítségével láthatjuk ennek a
hatását:
#
ls -al / | grep tmp
drwxrwxrwt 10 root wheel 512 Aug 31 01:49 tmpA sticky
bit a
beállítások végén
felbukkanó t
révén
azonosítható be.
Ha kérdése van a FreeBSD-vel kapcsolatban, a
következő címre írhat (angolul):
<questions@FreeBSD.org>.
Ha ezzel a dokumentummal kapcsolatban van kérdése, kérjük erre a címre írjon:
<gabor@FreeBSD.org>.