Jogosultságok az Ubuntu rendszeren Az Ubuntu, mint általában minden Linux, a UNIX(-jellegű) rendszerekre jellemző jogosultságkezelést használja. Itt csupán az alapismereteket tárgyaljuk a jogosultságkezeléssel kapcsolatosan. Az alábbiakban a DAC (Discretionary Access Control – kizárólagos hozzáférésvezérlés) típusú jogosultságkezelésről lesz szó, létezik még több típus is, ezek közül említésre méltó az MAC (Mandatory Access Control – rendelkezésalapú hozzáférésvezérlés) és az RBAC (Role-based Accesss Control – szerepalapú hozzáférésvezérlés). A DAC kiegészíthető a POSIX ACL-lel is (vagy NFSv4 ACL), így a jogosultságkezelés egy magasabb szintre léptethető. Jelen dokumentumban azonban ezeket a lehetőségeket nem tárgyaljuk.
Felhasználók és csoportok A UNIX jellegű operációsrendszerek alapvetően a többfelhasználós modellt támogatják, így az Ubuntu is. Hogy néz ki ez a gyakorlatban? • Minden felhasználónak van azonosítója, amely többféle módon is hivatkozható: o felhasználói név (pl.: user1), o valós azonosító szám, ID (pl.: 1000), o effektív azonosító szám (ez akkor jön létre, ha egy programot futtatsz, amely nem a te valós jogaiddal fut, most nem részletezzük ennek működését). • Minden felhasználó csoportokba tartozhat, amelyek közül egy a felhasználó alapértelmezett csoportja, a többi pedig olyan csoport, amelyekhez hozzáfér a felhasználó. • A fájlokhoz (vagy könyvtárakhoz, szimbolikus linkekhez stb.) egy tulajdonost és egy csoportot rendel a rendszer. Alapértelmezetten egy fájlnak egy tulajdonosa és egy csoportja lehet. • A fájlok hozzáférési jogai három csoportban vannak meghatározva: o a tulajdonoshoz tartozó jogok, o a csoporthoz tartozó jogok és o a bárki máshoz tartozó jogok. A felhasználói név és azonosító a /etc/passwd fájlban van meghatározva. Itt található az alapértelmezett csoport megnevezése is. A további csoportokat a /etc/group fájlban találjuk. A jelszavak egy külön helyen a /etc/shadow fájlban vannak.
A /etc/passwd fájl felépítése a következő: root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin sys:x:3:3:sys:/dev:/usr/sbin/nologin […] user1:x:1000:1000:User Anna,,,:/home/user1:/bin/bash user2:x:1001:1001:User Béla,,,:/home/user2:/bin/bash Az egyes felhasználók adatai egy-egy sorban találhatók, az adatmezőket kettőspontok választják el egymástól. Nézzük, mit jelentenek az adatmezők! 1. a felhasználó neve. 2. régi rendszerekből maradt mező, itt volt annakidején a jelszó. Az x azt jelenti, hogy a /etc/shadow fájlban megtalálható az adat. 3. a felhasználó azonosító száma. 4. a felhasználó alapértelmezett csoportjának azonosítója. 5. a felhasználó személyes adatai (valódi felhasználó esetén lehet vesszővel elválasztva a név, cím, telefonszám, fax, e-mail). Nevezik ezt a mezőt GECOS-mezőnek is. 6. a felhasználó saját könyvtárja (home könyvtár). 7. A felhasználó által kapott shell (vagy más program, amely elindul a bejelentkezést követően). A /etc/shadow fájl felépítése a következő: root:!:16307:0:99999:7::: daemon:*:16177:0:99999:7::: bin:*:16177:0:99999:7::: sys:*:16177:0:99999:7::: […] user1:$6$k8mfaVp5$stRE5[…]:16307:0:99999:7::: user2:$6$H4ihucaS$tnMz4[…]:16307:0:99999:7::: Ebben a fájlban a felhasználók a /etc/passwd fájl szerint vannak felsorolva, de a sorokban található adatmezők más funkcióval bírnak. 1. a felhasználó neve. 2. jelszómező. Lásd alább! 3. az utolsó jelszóváltoztatás időpontja*. 4. ennyi nap elteltével engedélyezett a jelszóváltás. 5. ennyi nap után cserélni kell a jelszót. 6. ennyi nappal a jelszólejárat előtt figyelmezteti a rendszer a felhasználót. 7. lejárt jelszóval ennyi napig lehet belépni. 8. a felhasználói fiók lejártának időpontja*. 9. fenntartva.
* Az epoch óta eltelt napok számában. Az epoch a UNIX rendszerek esetén az úgynevezett POSIX time (UNIX time) kezdőidőpontja (Az UTC időzóna szerint 1970. Január 1. 00.00.00). A jelszómezőben szereplő adatok az alábbiak lehetnek: • semmi – jelszó nélkül beléphet. • ! – jelszóval védett felhasználó, aki nem léphet be közvetlenül. A jelszó a felkiáltójel után következik, ha van. • * – a felhasználó nem léphet be a rendszerbe. • elkódolt jelszó. Az Ubuntu-tól eltérő rendszereken további változatok és lehetőségek is vannak: • *LK* – a *-gal azonos a szerepe. • NP – a semmivel azonos a szerepe Solaris rendszeren. • !! – RedHat alatt így jelezhető, hogy sosem volt jelszó beállítva egy felhasználóhoz. Ha a jelszó szerepel elkódolva a mezőben, akkor az alábbi szerkezetben kell megadni: $id$salt$hashed Tehát három, $ karakterrel kezdődő szakaszra bonthatjuk a mezőt. Az első rész határozza meg a titkosítás típusát, ezek Ubuntu esetén: • • • • •
1 – MD5 2a – Blowfish 2y – Blowfish javított karakterkezeléssel 5 – SHA-256 6 – SHA-512
A fenti kódolások a GNU/Linux rendszereken érvényesek, ettől akár jelentősen is eltérhet egyegy UNIX vagy UNIX-jellegű rendszer esetén a jelölés. Például a NetBSD-nél az _ karakter a DES titkosítást jelenti… Vagy az OSX esetén egy továbbfejlesztett jogosultságkezeléssel működik, amelynél a /etc/passwd fájlban nincsenek benne a valódi felhasználók és nem is létezik a Linux esetén megtalálható /etc/shadow fájl. Ez utóbbi rendszer egy LDAP alapú azonosítást végez, amelynek Apple Open Directory a neve. Az ilyen megoldásokat címtárszolgáltatásoknak is nevezzük és egyik leggyakoribb, hogy LDAP alapokon nyugszik. Az Apple megoldása egyébként SASL (Simple Authentication and Security Layer) keretrendszerre és Kerberosprotokollra épülő hitelesítést használ egy OpenLDAP implementáción, amelyet a NeXT rendszerhez fejlesztettek ki még az (Mac) OSX előtti időkben. A Microsoft Active Directory megoldása is egy LDAP implementáció.
A következő rész neve salt, ez határozza meg az elkódolás során az algoritmus működését. És végül az elkódolt jelszó (amelyet a fenti példában a pirossal jelzett részen megcsonkítottam).
Mint látható a valódi emberekhez tartozó felhasználó esetében valódi jelszó van beállítva és ezek kódolása a lehető legjobb módszerrel történik. (A 6-os ugyanis az SHA alapú 512 bites kódolás.) A /etc/group fájl felépítése a következő: root:x:0: daemon:x:1: bin:x:2: sys:x:3: […] cdrom:x:24:user1 […] sudo:x:27:user1,user2 […] nogroup:x:65534: […] user1:x:1000: user2:x:1001: […] smbcsoport01:x:1003:user1,user2 smbcsoport02:x:1004:user2 Itt is minden sor egy adatsor, de itt a sorok egy-egy csoportot határoznak meg. Az adatmezők rendre az alábbiak. 1. csoport neve. 2. jelszó. Rendszerint x. 3. csoportazonosító szám. 4. csoporttagok (vesszővel elválasztva).
Csoport és felhasználó ellenőrzése Az aktuális felhasználó csoportjai az alábbi parancs segítségével kilistázhatók: groups id -Gn Más felhasználó csoportjainak megtekintéséhez az alábbi parancs szükséges: groups user1 Itt a user1 csoportjait listáztuk ki.
Ha nem akarjuk, hogy a felhasználói névvel paraméterezett parancs visszatérésekor a felhasználó nevét is visszaadja, akkor használjuk a következő sort: id -Gn user1 A fenti parancsok a csoportok neveit adják vissza, de lehetőségünk van a csoportok azonosító számait is megtudni az alábbi parancsok segítségével: id -G id -G user1 Ha csak az alapértelmezett csoportot szeretnénk látni, használjuk a kis g-t: id -gn id -gn user1 id -g id -g user1 A felhasználói azonosító szintén lekérdezhető: whoami id -un Ha megnevezzük azt, akiét szeretnénk tudni, akkor kicsit értelmetlen a dolog, hiszen olyat kérdezünk, amit már tudunk: id -un user1 Számokkal a fentiek: id -u id -u user1 Az id további kapcsolóihoz és paraméterezéséhez információkat a man parancs kiadásával lehet nyerni. (A man a legtöbb parancshoz hasznos segédeszköz.) man id
Jogok ellenőrzése Egy könyvtár tartalmának listázásakor lehetőségünk van a benne lévő fájlok és könyvtárak jogosultsági beállításait is megtekinteni. Ehhez adjuk ki az alábbi parancsot! ls -l A parancs visszatérési értéke (kimenete) az alábbihoz hasonló lesz: user1@ubuntu:~$ ls –l összesen 132 drwxr-xr-x 2 user1 user1 4096 jún -rw-r--r-- 1 user2 user2 187 aug drwxr-xr-x 2 user1 user1 4096 dec -rw-r--r-- 1 user1 user1 8980 aug -rw-rw-rw- 1 root root 46450 aug drwxrwxrwx 4 root root 4096 aug drwxr-xr-x 2 user1 user1 4096 dec drwxr-xr-x 67 user1 user1 16384 dec drwx------ 8 user1 user1 4096 jún drwxr-xr-x 2 user1 user1 4096 dec drwxr-xr-x 2 user1 user1 4096 dec drwxr-xr-x 2 user1 user1 4096 dec drwxr-xr-x 2 user1 user1 4096 dec
14 12:17 Asztal 25 2014 Disks.desktop 11 2014 Dokumentumok 25 2014 examples.desktop 29 2014 fonts.txt 25 2014 Icons 11 2014 Képek 11 2014 Letöltések 7 14:02 Maildir 11 2014 Nyilvános 11 2014 Sablonok 11 2014 Videók 11 2014 Zenék
Mivel a Linuxon szinte minden fájl, ezért nem lepődünk meg, hogy a könyvtárak is kilistázódtak. A fenti példában egy felhasználó a saját könyvtárának tartalmát listázta ki, ha magának a könyvtárnak a jogosultságára lennénk kíváncsiak, akkor a fenti parancsot egy másik kapcsolóval kiegészítve kellene használnunk az alábbiak szerint. ls -ld Ennek a kimenete már ilyen lesz: user1@ubuntu:~$ ls -ld drwxr-xr-x 22 user1 user1 4096 jún
7 20:03 .
A jogosultságok kezelése szempontjából számunkra az utolsó oszlopon túl az első, a harmadik és a negyedik oszlopok fontosak. Az első írja le a jogköröket. Pl.: -rw-r--r--
A harmadik a tulajdonost azonosítja. Pl.: user1 A negyedik pedig a csoportot jelöli ki. Pl.: user1 Az utolsó oszlop a fájl (vagy könyvtár, szimbolikus link stb.) neve. A fenti jogosultságokat megtekinthetjük Midnight Commander-rel (mc) is. Az F9, f, a billentyűk egymás utáni lenyomására az aktuális fájl jogosultsági adatait láthatjuk (és állíthatjuk be):
┌──────────────────────── Chmod-Chown parancs ─────────────────────────┐ │ Asztal (1/1) │ ├──────────────────────────────────────────────────────────────────────┤ │ Tulaj Csoport Mások Tulaj Csoport │ │ [rwx] [r-x] [r-x] [user1] [user1] │ │ Jel === === === =============== =============== │ │ Permissions (octal): 40755 │ ├──────────────────────────────────────────────────────────────────────┤ │ [< Beállít >] [ Mégsem ] │ └──────────────────────────────────────────────────────────────────────┘
Mit jelentenek a számok és betűk a jogoknál? A jogokat felírhatjuk betűkkel és számokkal egyaránt. Kezdjük a számokkal Általában egy 5 vagy 6 jegyű számot látunk az előző részben látott ChmodChown párbeszédpanelen, mint a „Permissions (octal)” értéke. Tehát ez egy nyolcas-számrendszerben értelmezhető szám. Haladjunk a helyiértékeken emelkedő sorrendben (vagyis az utolsó számjegytől visszafelé). Az utolsó három számjegy a tényleges jogosultság leírása, a végéről negyedik a speciális biteket jelzi, az ötödik és hatodik (amely nem mindig létezik) a fájl típusát adja vissza.
Példák a fájl típusára: • 4 – könyvtár • 10 – sima fájl A speciális bitek a következők: • • • • • • • •
0 1 2 3 4 5 6 7
– – – – – – – –
semmi Sticky-bit (T-bit) GUID (setgid) Sticky-bit + GUID SUID (setgid) Sticky-bit + SUID GUID + SUID Sticky-bit + GUID + SUID
Ezekről később lesz szó. A tényleges jogosultságok balról jobbra pedig a tulajdonos, a csoport és mindenki más jogosultságai az alábbiak szerint (zárójelben a betűkód): • • • • • • • •
0 1 2 3 4 5 6 7
(---) (--x) (-w-) (-wx) (r--) (r-x) (rw-) (rwx)
– – – – – – – –
semmi futtatás (belépés a könyvtárba) írás futtatás + írás olvasás futtatás + olvasás írás + olvasás futtatás + írás + olvasás
A betűk jelentése Az ls -l kimenetén látható jogkörök egy a fent is láthatóhoz hasonló karakterláncon jelennek meg: -rw-r--r-Ennél a formánál az első karakter a fájl típusát határozza meg: • • • • • • • •
d l p s c b D
– – – – – – – –
sima fájl könyvtár szimbolikus link csővezeték (FIFO, pipe) socket karakteres eszköz blokk eszköz kapu (csak Solaris-on)
A következő három a tulajdonos jogait és a setuid bitet, az ezt követő három a csoport jogait és a setguid bitet, az utolsó három pedig mindenki más jogait és a sticky-bitet határozza meg. Az rwx karakterek a számoknál is megismert módon működnek. A speciális bitek a futtatást jelző karakterrel működnek együtt az alábbi módon: • • • • • •
x S s T t
– – – – – –
semmi futtatható (könyvtárnál belépés lehetséges) nem futtatható, setuid vagy setguid-bit van rajta futtatható, setuid vagy setguid-bit van rajta nem futtatható, sticky-bit van rajta futtatható, sticky-bit van rajta
Setuid, setgid, sticky-‐bit A bitek hatása könyvtár esetén: Setuid – a könyvtárban létrejövő fájlok és könyvtárak a könyvtár tulajának tulajdonába kerülnek. Setgid – a könyvtárban létrejövő fájlok és könyvtárak a könyvtár csoportjának csoportjába kerülnek. Sticky – a könyvtárban mindenki csak a saját fájljait képes törölni. A bitek hatása fájlok esetén: Setuid – a fájl a tulajdonos nevében fut. Setgid – a fájl a csoportjának megfelelő csoporthoz tartozóként fut. Sticky – a mai rendszerekben nincs hatása, régen az általa kezelt memóriaterületek viselkedése változott meg. Innen a neve is. Fájlok esetében (biztonsági okokból) a biteknek csak bináris, futtatható állományokra van hatása (modern rendszerek használatakor).
További információk Az alábbi parancsok man oldalait érdemes nézegetni: passwd, chmod, chgrp, newgrp, mkdir, rmdir, mv, cp, rm, ln, adduser, getent, useradd, chage, addgroup, groupadd, usermod, id, vipw, vigr, userdel, deluser, groupmod, chfn, chsh, groupdel, grpck, newgrp, login, su