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 [9]. 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/highAhogy 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
alakban használatosak, tehát aösszehasonlítás
:rekesz
+rekesz
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:
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.
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.
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 - A hibák elhárítása a MAC
rendszerbenát.
[9] 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):
<questions@FreeBSD.org>.
Ha ezzel a dokumentummal kapcsolatban van kérdése, kérjük erre a címre írjon:
<gabor@FreeBSD.org>.