A MAC-címke egy olyan biztonsági tulajdonság, amelyet a rendszerben található alanyokhoz és objektumokhoz rendelhetünk.
Egy címke beállításához a felhasználónak pontosan ismernie kell, hogy ilyenkor mi történik. Az objektumokhoz tartozó tulajdonságok a betöltött moduloktól függenek, és az egyes modulok eltérő módon értelmezik ezeket a tulajdonságokat. Ha a precíz megértésük hiányában helytelenül állítjuk be ezeket, vagy nem vagyunk képesek tisztázni a velük járó következményeket, akkor az a rendszerünk kiszámíthatatlan és valószínűleg kedvezőtlen viselkedését eredményezi.
A házirendek az objektumhoz rendelt biztonsági címkéket a hozzáféréssel kapcsolatos döntések meghozásában használják fel. Bizonyos házirendek esetében már maga a címke elegendő információt tartalmaz a döntés megformálásához. Máshol viszont a címkék egy nagyobb szabályrendszer részeként dolgozódnak fel stb.
Például, ha egy állományra beállítjuk a biba/low címkét, akkor az arra fog utalni, hogy a címkét a Biba nevű biztonsági modul kezeli és értéke “low”.
Az a néhány modul, amely a FreeBSD-ben támogatja a címkézés lehetőségét, három speciális címkét definiál előre. Ezek rendre a “low” (alacsony), “high” (magas) és “equal” (egyező) címkék. Habár az egyes modulok esetén eltérő módon képesek vezérelni a hozzáférést, azt mindig biztosra vehetjük, hogy a “low” a legalacsonyabb érték, az “equal” címke hatására az adott alanyt vagy objektumot érintetlenül hagyják, és a “high” értékű címke a Biba és MLS modulok esetében a legmagasabb beállítást jelenti.
Az egycímkés állományrendszerek
használata során az egyes objektumonkhoz csak
egyetlen címkét rendelhetünk hozzá.
Ezzel az egész rendszerben csak egyfajta engedélyt
alkalmazunk, ami sok esetben pontosan elegendő.
Létezik néhány különleges eset,
amikor az állományrendszerben levő alanyokhoz
vagy objektumokhoz egyszerre több címkét is
hozzá kell rendelnünk. Ilyenkor a
multilabel
opciót kell átadnunk a
tunefs(8) segédprogramnak.
A Biba és az MLS esetében előfordulhat, hogy egy numerikus címkével fogjuk jelölni a hierarchikus irányítás pontos szintjét. A numerikus szintek használatával tudjuk az információt különböző csoportokba szétosztani vagy elrendezni, például úgy, hogy csak az adott szintű vagy a felette álló csoportok számára engedélyezzük a hozzáférést.
Az esetek többségében a rendszergazdának csak egyetlen címkét kell beállítania az egész állományrendszerre.
Hé, álljunk csak meg! Akkor ez viszont pont olyan, mint a DAC! Én azt hittem, hogy a MAC szigorúan a rendszergazda kezébe adja az irányítást. Ez az állítás továbbra is fennáll, mivel bizonyos értelemben a root lesz az, aki beállítja a házirendeket, tehát ő mondja meg, hogy a felhasználók milyen kategóriákba vagy hozzáférési szintekbe sorolódnak. Sajnos, sok biztonsági modul még magát a root felhasználót is korlátozza. Az objektumok feletti irányítás ilyenkor a csoportra száll, de a root bármikor visszavonhatja vagy módosíthatja a beállításokat. Ezzel a hierarchikus/engedély alapú modellel a Biba és az MLS nevű házirendek foglalkoznak.
A címkézéshez kapcsolódó összes beállítást gyakorlatilag az alapvető rendszerprogramokkal végezhetjük el. Ezek a parancsok az objektumok és az alanyok szabályozásához, valamint a konfiguráció módosításához és ellenőrzéséhez adnak egy egyszerű kezelőfelületet.
Az összes konfigurációs beállítást a setfmac(8) és setpmac(8) segédprogramokkal végezhetjük el. A setfmac segítségével a rendszerszintű objektumokhoz tudunk hozzárendelni a MAC-címkéket, míg a setpmac paranccsal a rendszerben levő alanyokhoz tudunk címkéket rendelni. Vegyük például ezt:
# setfmac biba/high próba
Amennyiben az iménti parancs hibátlanul lefutott, visszakapjuk a paranccsort. Ezek a parancsok csak olyankor maradnak nyugodtan, amikor semmilyen hiba nem történt. Működésük hasonló a chmod(1) és chown(8) parancsokéhoz. Bizonyos esetekben “Permission denied” (“A hozzáférés nem engedélyezett”) hibát kapunk, ami általában akkor bukkan fel, ha egy korlátozott objektummal kapcsolatban próbálunk meg címkét beállítani vagy módosítani [1]. A rendszergazda a következő paranccsal tudja feloldani az ilyen helyzeteket:
# setfmac biba/high próba “Permission denied” # setpmac biba/low setfmac biba/high próba # getfmac próba próba: biba/high
Ahogy az itt tetten is érhető, a
setpmac használható a modul
beállításainak
felülbírálására úgy,
hogy a meghívott programban egy másik
címkét állít be. A
getpmac segédprogram
általában a sendmailhez
hasonló háttérben futó programok
esetében alkalmazható: ilyenkor a konkrét
parancs helyett a futó program
azonosítóját kell megadnunk, de
működése ugyanaz. Ha a
felhasználók a hatókörükön
túl levő állományokat
próbálnak meg módosítani, akkor a
betöltött modulok szabályainak megfelelően
a mac_set_link
függvény
“Operation not permitted” (“A
művelet nem engedélyezett”) hibát
fog adni.
A mac_biba(4), mac_mls(4) és mac_lomac(4) moduloknál használhatunk címkéket. Értékük lehet “high”, “equal” vagy “low”, melyek rövid magyarázata a következő:
A low címke az objektumra vagy alanyra érvényes leggyengébb beállítást jelenti. Az ilyen címkéjű objektumok vagy alanyok nem érhetik el a “high” címkéjűeket.
Az equal címke használható minden olyan objektum vagy alany esetében, amelyeket ki akarunk vonni az adott házirend hatálya alól.
A high címke adja az objektumhoz vagy alanyhoz tartozó legerősebb beállítást.
Az egyes moduloktól függően ezek az értékek az információ áramoltatásának különböző irányait írhatják le. A megfelelő man oldalak elolvasásával még jobban megismerhetjük az egyes címketípusok beállításának jellegzetességeit.
A numerikus osztályozó címkék összehasonlítás:rekesz+rekesz alakban használatosak, tehát a
biba/10:2+3+6(5:2+3-20:2+3+4+5+6)
kifejezés így értelmezhető:
“A Biba házirend címkéje”/“10 osztály” :“2, 3 és 6 rekeszek”: (“5 osztály...”)
Ebben a példában az első osztály tekinthető “valódi osztálynak”, amely a “valódi rekeszeket” jelenti, a második osztály egy alacsonyabb besorolás, míg az utolsó egy magasabb szintű. A legtöbb konfigurációban nem lesz szükségünk ennyire összetett beállításokra, noha képesek vagyunk felírni ezeket.
Ha ezt kivetítjük a rendszer objektumaira, akkor a rendszerben levő alanyokat illetően csupán az aktuális osztály/rekeszek számítanak, mivel a rendszerben és hálózati csatolófelületeken elérhető hozzáférés-vezérlési jogokat tükrözi.
Az alany-objektum párokban megadott osztályzatok és rekeszek használhatóak fel egy olyan kapcsolat kiépítésére, amit “dominanciának” nevezünk. Ilyenkor egy alany ural egy objektumot, vagy egy objektum ural egy alanyt, vagy egyikük sem uralja a másikat, esetleg mind a kettő uralja egymást. A “kettős dominancia” esete akkor forog fenn, amikor a két címke megegyezik. A Biba információáramoltatási sajátosságaiból adódóan jogunk van rekeszeket létrehozni, “tudunk kell”, hogy ezek projekteknek feleltethetőek meg, de az objektumok is rendelkezhetnek rekeszekkel. A felhasználók ilyenkor csak úgy tudnak elérni egyes objektumokat, ha az su vagy a setpmac használatával leszűkítik a jogaikat egy olyan rekeszre, ahol már nem érvényesülnek rájuk korlátozások.
Maguknak a felhasználóknak is szükségük van címkékre, mivel csak ezek segítségével tudnak az állományaik és programjaik megfelelő módon együttműködni a rendszerben érvényes biztonsági házirenddel. Ezt a login.conf állományban megadható bejelentkezési osztályokkal állíthatjuk be. Minden címkéket használó modulban a felhasználóknak is van címkéjük.
Lentebb látható egy ilyen minta bejegyzés, amely minden modulhoz tartalmaz beállítást:
default:\ :copyright=/etc/COPYRIGHT:\ :welcome=/etc/motd:\ :setenv=MAIL=/var/mail/$,BLOCKSIZE=K:\ :path=~/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:\ :manpath=/usr/share/man /usr/local/man:\ :nologin=/usr/sbin/nologin:\ :cputime=1h30m:\ :datasize=8M:\ :vmemoryuse=100M:\ :stacksize=2M:\ :memorylocked=4M:\ :memoryuse=8M:\ :filesize=8M:\ :coredumpsize=8M:\ :openfiles=24:\ :maxproc=32:\ :priority=0:\ :requirehome:\ :passwordtime=91d:\ :umask=022:\ :ignoretime@:\ :label=partition/13,mls/5,biba/10(5-15),lomac/10[2]:
Itt a label opciót használtuk a felhasználói osztályhoz tartozó alapértelmezett címkék beállításához, amit majd a MAC betartat. A felhasználók nem módosíthatják ezt az értéket, ezért ez a felhasználók számára nem tekinthető tetszőlegesen elhagyható beállításnak. Egy valós konfigurációban azonban a rendszergazda valószínűleg nem akarja majd egyszerre az összes modult használni. Javasoljuk, hogy mielőtt egy ilyen jellegű konfigurációt adnánk meg, olvassuk el az egész fejezetet.
Megjegyzés: A felhasználók ezt a címkét meg tudják változtatni az első bejelentkezés után, de csak a házirend keretein belül. A fenti példában úgy állítjuk be a Biba házirendet, hogy a futó programok sértetlenségi foka legalább 5, legfeljebb 15 lehet, de az alapértéke 10. Tehát a programok egészen addig 10-es szinten futnak, amíg a programok a Biba bejelentkezéskor megadott tartományában meg nem változtatják ezt a címkét, feltehetően a setpmac parancs hatására.
Mindig, amikor megváltozatjuk a login.conf beállításait, a cap_mkdb paranccsal újra kell generálni a bejelentkezési osztályokhoz tartozó adatbázist, amire a későbbi példákban vagy részekben igyekszünk is mindig felhívni a figyelmet.
Nem árt hozzátennünk, hogy sok rendszerben kifejezetten sok felhasználót kell kezelnünk, amihez több különböző bejelentkezési osztályra is szükségünk lehet. Mivel később már csak egyre jobban bonyolódni fog a felhasználók kezelése, ezért soha ne felejtsünk el komolyan előre tervezni.
A FreeBSD következő változataiban meg fognak jelenni más módszerek is a felhasználók és címkék közti kapcsolatok kezelésére. A FreeBSD 5.3 előtt azonban ez még semmiképpen sem várható.
A hálózati csatlakozások esetében is állíthatunk be címkéket, melyek a hálózaton keresztül folyó adatok áramlását határozzák meg. Minden esetben ugyanúgy működnek, mint ahogy a házirendek az objektumokra. Például a biba esetében a magas beállításokkal rendelkező felhasználók nem férhetnek hozzá az alacsonyabb címkéjű hálózati csatolófelületekhez.
Ha MAC-címkéket akarunk
rendelni egy hálózati felülethez, akkor az
ifconfig parancsnak adjuk meg a
maclabel
paramétert.
Például a
# ifconfig bge0 maclabel biba/equal
parancs beállítja a biba/equal MAC-címkét a bge(4) felületre. A biba/high(low-high) alakú címkéket átadásukhoz idézőjelek közé kell tenni, különben hibát kapunk.
Minden címkézést
támogató modulhoz tartoznak futási
időben állítható paraméterek,
amelyekkel akár le is tudjuk tiltani a
MAC-címkéket a
hálózati csatolófelületeken.
Ugyanezt jelenti egyébként, ha
equal
értéket adunk meg a
címkének. Ezt behatóbban úgy
ismerhetjük meg, ha kielemezzük a
sysctl parancs kimenetét, a
megfelelő modul man oldalát vagy a fejezetben
további részében található,
erre vonatkozó információkat.
Alapértelmezés szerint a rendszer a
singlelabel
beállítást
használja. Ez vajon mit tartogat a rendszergazda
számára? Számos olyan
eltérést, aminek megvannak a saját
előnyei és hátrányai a rendszer
védelmi modelljének rugalmassága
szempontjából.
A singlelabel
beállítás minden alany vagy objektum
esetében csupán egyetlen címke,
például a biba/high
használatát engedi. Kevesebb
adminisztrációs költséggel jár,
azonban csökkenteni a címkézést
támogató modulok
testreszabhatóságát. Ezért sok
rendszergazda inkább a multilabel
beállítást választja a
biztonsági házirend kialakítása
során.
A multilabel
beállítás
lehetővé teszi, hogy mindegyik alanyhoz és
objektumhoz a szabványos singlelabel
beállítás lehetőségeivel
szemben egymástól függetlenül
külön-külön rendelhessünk
címkéket a partíciókon. Az egy-
és többcímkés opciónak csak
olyan modulok esetében van értelme, amelyek
támogatják a címkézést, mint
például a Biba, Lomac, MLS
és a SEBSD házirendek.
Sokszor egyáltalán nincs is
szükségünk a multilabel
használatára. Tekintsük
például a következő helyzetet és
biztonsági modellt:
Adott egy FreeBSD webszerver, ahol a MAC rendszert több biztonsági házirenddel alkalmazzuk.
A gépen egyedül csak a
biba/high címkére van
szükségünk mindenhez a rendszerben. Itt
egyszerűen csak nem adjuk meg az
állományrendszernek a
multilabel
beállítást,
mivel az egycímkés rendszer mindig
rendelkezésünkre áll.
Mivel azonban erre a gépre telepíteni akarunk egy webszervert is, ilyenkor a biba/low címke használatával igyekszünk korlátozni a szerver feldolgozási képességeit. A Biba házirendről és annak működéséről csak a későbbiekben fogunk írni, ezért ha az előbbi megjegyzést még nem teljesen értjük, akkor egyszerűen csak olvassunk tovább és térjünk vissza ide. A szerver futása alatt, vagy legalább is idejének nagy részében egy külön partíciót használhatna, amire a biba/low címkét állítanánk be. Természetesen ez a példa korántsem teljes, hiszen hiányoznak belőle az adatokra érvényes korlátozások, a konfigurációs és felhasználói beállítások. Ez csupán az iménti gondolatmenet gyors illusztrációja.
Amennyiben címkézést nem
támogató modulokat alkalmazunk, a
multilabel
beállításra
szinte sosem lesz szükségünk. Ilyenek
például a seeotheruids,
portacl és
partition házirendek.
A multilabel
opció használata
és így speciális,
többcímkés védelmi modell
létrehozása képes elbonyolítani a
rendszer karbantartását, mert ilyenkor az
állományrendszerben mindennek lennie kell
címkéjének: könyvtáraknak,
állományok és még az
eszközleíróknak is.
A most következő paranccsal
beállítjuk az állományrendszerre a
multilabel
opciót. Ez csak
egyfelhasználós módban tehető
meg:
# tunefs -l enable /
A lapozópartíció esetében erre nincs szükség.
Megjegyzés: Előfordulhat, hogy néhány felhasználónak nem sikerül a
multilabel
opciót beállítania a rendszerindító partícióra. Ha ez történne, akkor olvassuk el a fejezet 16.17 Szakaszát.
[1] | Más feltételek mellett másmilyen hibák keletkezhetnek. Például, ha egy olyan objektumot próbálunk újracímkézni, amely nincs a felhasználó birtokában, esetleg nem is létezik vagy írásvédett. Adódhat, hogy a kötelező házirend az állomány, a program, vagy az új címkeérték tulajdonságai miatt nem fogja lehetővé tenni egy futó program számára egy állomány újracímkézését. Nézzük erre egy példát: egy kevésbé sértetlen felhasználó megpróbálja megváltoztatni egy sokkal sértetlenebb állomány címkéjét. Vagy egy kevésbé sértetlen felhasználó sokkal sértetlenebbre akarja állítani egy kevésbé sértetlen állomány címkéjét. |
Ha kérdése van a FreeBSD-vel kapcsolatban, a következő
címre írhat (angolul): <freebsd-questions@FreeBSD.org>.
Ha ezzel a dokumentummal kapcsolatban van kérdése,
kérjük erre a címre írjon: <gabor@FreeBSD.org>.