A DAC szó a Discretionary Access Control szavakból alkotott betűszó, jelentése röviden „Kizárólagos hozzáférés-vezérlés”. Ez megengedi az azonosított felhasználóknak az objektumokhoz való hozzáférést azok tulajdonságai alapján. A hozzáférés csak a tulajdonosra, illetve csak a csoportra állítható be.
Ismert még a MAC vagy Mandatory Access Control, vagy Rendelkező hozzáférés-vezérlés. Az objektumok számára hozzáférési szabályokat hozunk létre, amely minden felhasználóra (még a rootra is) érvényesek.
A harmadik a Role-based Accesss Control vagy RBAC. Szerep alapú hozzáférés-vezérlés. A rendszergazda különböző szerepeket hoz létre. Az egyes objektumokhoz az adott szerepben lehet hozzáférni, az adott jogokkal.
Mi most a DAC alapú jogosultságrendszert tanulmányozzuk. Ezeket a unixos alapjogoknak is szokás nevezni.
Alapvetően háromféle jogot különböztetünk meg:
olvasás | Read | r |
írás | Write | w |
végrehajtás | eXecute | x |
A jogok háromféle felhasználónak adhatók:
A chmod paranccsal állítgatjuk a jogokat, ahol néha hivatkozunk a tulajdonosokra, csoportokra, illetve mindenki másra, az alábbi táblázat alapján:
tulajdonos | User | u |
csoport | Group | g |
mások | Other | o |
mindenki | All | a |
Van egy negyedik hivatkozás, amely „mindenki” nevet viseli. Ez tartalmazza mind az előző hármat együtt.
A mindenki mind a három fajta felhasználót jelenti, amelyet például a chmod paranccsal használhatunk.
Mind a háromfajta felhasználónak állítható a olvasási, írási és végrehajtási jog. A következő táblázat amely az „ls -l” kimenetéből származhat jól szemlélteti ezt:
Az ls -l kiemente:
-rw-r--r-- 1 joska joska 3184 dec 13 18.37 .bashrc
Táblázatban a jog rész:
típus | tulajdonos jogai | csoport jogai | mindenki más jogai |
- | rw- | r-- | r-- |
A típus a következő lehet:
Tartalom | Jelentés |
---|---|
- | Szimpla fájl |
d | Könyvtár |
D | Solaris kapu (Folyamatok közötti kommunikáció) |
c | Karakteres eszköz (tty vagy nyomtató) |
b | Blokkeszköz (rendszerint lemez vagy CD-ROM) |
l | Szimbolikus link (BSD vagy SVR4) |
s | Socket (BSD vagy SVR4) |
= vagy p | FIFO (System V, Linux) |
A Solaris kapu csak Sun Solaris rendszeren fordul elő.
A parancsot egy állomány vagy egy könyvtár tulajdonos illetve csoport beállítása használhatjuk.
chown joska.joska fajlnev
chown joska:joska fajlnev
A csoport felhasználónevét nem kötelező megismételni:
chown joska: fajlnev
vagy:
chown joska. fajlnev
A chmod parancs a jogok beállítására használható.
Két módon adhatunk/vehetünk el jogokat. Az egyik számokkal, a másik betűkkel.
Betűkkel először megadjuk kinek adunk vagy kitől veszünk el. Ez után +/- attól függően, hogy adunk vagy elveszünk. Majd végül mit adunk vagy mit veszünk el. A felhasználófajta halmozható, vagyis egymás után írhato például: ug, vagy uo vagy ugo. Ez utóbbi persze egyenlő azzal ha csak „a”-t adok meg. A jogok szintén halmozhatók.
A jogokat az alábbi táblázat alapján rakhatjuk össze:
Kinek/kitől | Művelet | Mit | ||
---|---|---|---|---|
u | Saját(user) | + | r | olvasás |
g | csoport(group) | - | w | írás |
o | más(other) | x | végrehajtás | |
a | mindenki(all) |
Nézzünk néhány példát. Szeretnénk a felhasználónak írási jogot adni az erdo.txt fájlra.
chmod u+w erdo.txt
Most adjunk a csoportnak és a tulajdonosnak minden jogot:
chmod ug+rwx erdo.txt
Itt a példában halmoztuk a felhasználók fajtáját és a jogokat is.
A jogok kifejezhető egy oktális számmal is. A chmod parancs ezeket képes használni. A következő táblázat megmutatja az egyes számok jelentését.
0 | - | - | - | nincs jogosultság |
1 | - | - | x | végrehajtási jog |
2 | - | w | - | írási jog |
4 | r | - | - | olvasási jog |
A fenti táblázat alapján a jogok keverése mellett a következő jogok adhatók:
0 | - | - | - | nincs jogosultság |
1 | - | - | x | végrehajtási jog |
2 | - | w | - | írás jog |
3 | - | w | x | írás, végrehajtás jog |
4 | r | - | - | olvasási jog |
5 | r | - | x | olvasás, végrehajtás jog |
6 | r | x | - | olvasás, írás jog |
7 | r | w | x | minden jog |
Ha számokkal adjuk meg a jogokat, akkor tulajdonosnak, a csoportnak és mindenki másnak együtt kell megadni a jogokat. Megtehetjük, hogy csak egy számot adunk meg, ekkor a mindenki más jogait állítjuk be, és elvesszük a tulajdonostól, illetve a csoporttól a jogokat. Az alábbi példában mindenki másnak megadjuk az olvasási, írási és futtatási jogokat.
chmod 7 erdo.txt
Futtatás után az ls -l erdo.txt kimenete:
-------rwx 1 mari info 28 márc 8 21.05 erdo.txt
Ebben az esetben erdo.txt állományt a mari nevű felhasználó és az info csoport nem olvashatja, nem írhatja, nem futtathatja, mindenki más igen.
A következő példában a csoportnak olvasási és írási jogot adunk, mindenki másnak olvasási, írási és végrehajtási jogot.
chmod 67 erdo.txt
Az ls -l erdo.txt kimenete:
----rw-rwx 1 mari info 28 márc 8 21.05 a.txt
Adjunk mindenkinek olvasási és írási jogot:
chmod 666 erdo.txt
Most adjunk a csoportnak és a tulajdonosnak minden jogot, mindenki mástól vegyük el:
chmod 770 erdo.txt
Itt a példában halmoztuk a felhasználók fajtáját és a jogokat is.
A stat paranccsal lekérdezhetők a számok:
stat -c '%A %a %n' *
stat -c '%A %a %n' adat.txt
Tartalom | Jog | Jelentés |
---|---|---|
r | Olvasás | Olvasási jog: Megnyithat egy fájlt az open() rendszerhívással a read()-al pedig olvashatja. |
w | Írás | Írási jog: Új fájlt hozhatsz létre, vagy egy meglévőt módosíthatsz. Használhatod a write(), truncate( ) vagy ftruncate( ) rendszerhívást |
x | Futtatás | Futtatási jog: Futtathatod a fájl útvonalának begépelésével, vagy az exec() rendszerhívással. Hogy hogyan fut a program az állomány első két byte függvénye. A #! például futtatható scriptre utal. |
Tartalom | Jog | Jelentés |
---|---|---|
r | Olvasás | Használhatod az opendir( ) és az readdir( ) függvényeket (vagy az ls parancs) megnézni milyen fájlok vannak a könyvtárban. |
w | Írás | Létrehozás, átnevezés, mozgatás a könyvtárban |
x | Futtatás | Fájl és alkönyvtár tartalma megtekinthető |
Az umask határozza meg, hogy egy fájl vagy egy könyvtár milyen jogokkal jöjjön létre alapértelmezetten.
Az umask kétéfle módon határozható meg:
Az alapértelmezett érték 022. Az érték központilag felülírható az /etc/profile állományban is. A felhasználók ezt az értéket felülírhatják saját .profile vagy .bashrc állományukban.
Ha az alapértelmezett beállítást szeretnénk megváltoztatni, írjuk a fenti állomány egyikének végére:
umask 002
A beállított érték az újabb bejelentkezés esetén lesz érvényes.
Minden fájlnak van egy alapértelmezett létrehozási joga, ugyanígy a könyvtáraknak is:
fájlok | 666 |
könyvtárak | 777 |
Az umask segítségével ebből az alapértelmezésből veszünk még el.
Néhány lehetőség röviden:
A használható oktális értékeket a következő táblázat mutatja:
oktális szám | amit jelent |
---|---|
0 | olvasás, írás, futtatás |
1 | olvasás, írás |
2 | olvasás, futtatás |
3 | olvasás |
4 | írás, futtatás |
5 | írás |
6 | futtatás |
7 | nincs jog |
A 644 kivonással jön létre:
666-022=644
A 755 kivonással jön létre:
777-022=755
umask 077 mkdir dir1 touch file1 stat -c '%A %a %n' *
Lássuk a stat parancs kimenetét:
drwx------ 700 dir1 -rw------- 600 file1
Ugyanez az eredmény érhető el szimbolikus értékekkel:
umask u=rwx,g=,o=