[[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