[[oktatas:linux|< Linux]]
====== Linuxos jogok ======
* **Szerző:** Sallai András
* Copyright (c) 2011, Sallai András
* Szerkesztve: 2011, 2015
* Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC BY-SA 4.0]]
* Web: https://szit.hu
===== Bevezetés =====
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.
===== A linuxos jogokról =====
Alapvetően háromféle jogot különböztetünk meg:
* olvasás
* írás
* végrehajtás
| olvasás | Read | r |
| írás | Write | w |
| végrehajtás | eXecute | x |
A jogok háromféle felhasználónak adhatók:
* tulajdonos
* csoportba tartozó felhasználó
* mindenki más (aki az előző kettőben nincs benne)
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ő.
===== chown =====
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
===== chmod =====
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 megadása számokkal =====
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
===== A fájlok és a könyvtárak jogai =====
==== Fájlok jogai ====
^ 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. |
==== Könyvtárak jogai ====
^ 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 =====
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:
* szimbolikus értékekkel
* oktális értékekkel
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:
* 022 -- Lehetővé teszi fájlok egyéni írását, amiket mások olvashatnak.
* 077 -- Mindenki csak a saját állományait látja.
* 002 -- Fájlokat azonos csoportban lévők írhatják.
* Csoporton kívül csak olvasási jog.
* 007 -- aki nem csoport tag teljesen kizárva
==== Maszk számítás ====
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 fájl jogainak számítása ====
* fájl alapjogok: 666
* umask: 022
* számított jog: 644
A 644 kivonással jön létre:
666-022=644
==== A könyvtár jogainak számítása ====
* könyvtár alapjogok: 777
* umask: 022
* számított jog: 755
A 755 kivonással jön létre:
777-022=755
==== Példa ====
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=
===== Forrás =====
* man 2 chmod
* man 2 stat
* man 2 umask
* https://www.cyberciti.biz/tips/understanding-linux-unix-umask-value-usage.html