Jogosultságkezelés filerendszer-szinten

Ha kérünk egy listát egy tetszőleges könyvtárban egy terminálablakban az ls -l paranccsal, akkor sok érdekességet látunk.

gvamosi@gergo1:~$ ls -l
total 64
drwxr-xr-x 3 gvamosi gvamosi 4096 Aug 22 04:30 Android
drwxr-xr-x 3 gvamosi gvamosi 4096 Aug 22 04:40 AndroidStudioProjects
drwxr-xr-x 2 gvamosi gvamosi 4096 Aug 22 04:15 Desktop
drwxr-xr-x 24 gvamosi gvamosi 4096 Sep 1 23:58 Documents
drwxr-xr-x 23 gvamosi gvamosi 12288 Aug 27 20:37 Downloads
-rwxr-xr-x 1 gvamosi gvamosi 25 Sep 8 11:10 ls.sh
drwxr-xr-x 3 gvamosi gvamosi 4096 Aug 28 2017 Music
drwxr-xr-x 4 gvamosi gvamosi 4096 Sep 2 14:21 ownCloud
drwxr-xr-x 2 gvamosi gvamosi 4096 Sep 7 13:43 Pictures
drwxr-xr-x 2 gvamosi gvamosi 4096 Aug 26 2017 Public
-rw-r--r-- 1 gvamosi gvamosi 3122 Mar 28 2017 Release.key
drwxr-xr-x 2 gvamosi gvamosi 4096 Aug 26 2017 Templates
-rw-r--r-- 1 gvamosi gvamosi 497 Sep 4 07:09 tty3_terminal_alma.txt
drwxr-xr-x 2 gvamosi gvamosi 4096 Aug 26 2017 Videos

A sor elején a d betű azt jelöli, hogy egy bejegyzés könyvtár-e. Az r bejegyzés az olvasási jog, a w bejegyzés az írási jog, és végül az x bejegyzés a “végrehajthatósági” jog, azaz hogy egy adott bejegyzés “executeable”-e vagyis futtatható-e.

Három csoportra lehet ezeket a flag-eket megadni, külön a gvamosi user-re, azaz felhasználóra, majd a gvamosi group-ra, azaz felhasználói csoportra és végül az egyéb felhasználókra.

Parancs szinten ez a következőképpen néz ki:

gvamosi@gergo1:~$ chmod o-x ls.sh
gvamosi@gergo1:~$ ls -l ls.sh
-rwxr-xr-- 1 gvamosi gvamosi 25 Sep 8 11:10 ls.sh

Így tudjuk az “others“-től, azaz a többi felhasználótól megvonni a jogot arra, hogy futtathassa a példa ls.sh parancsfile-unkat. Jól látható, hogy a harmadik csoportban eltűnt az x flag. 🙂

Nézzük meg még az úgynevezett symbolic link-eket. Az ln paranccsal tudunk egyet létrehozni. Ez a link mutathat könyvtárra, file-ra, bármire. Nagyon hasznos tud lenni, ha el akarunk érni valamit, ami más könyvtárban van elhelyezve a filerendszerben.

gvamosi@gergo1:~$ ln -s ls.sh alma.sh
gvamosi@gergo1:~$ l
total 64
lrwxrwxrwx 1 gvamosi gvamosi 5 Sep 8 11:18 alma.sh -> ls.sh
-rwxr-xr-- 1 gvamosi gvamosi 25 Sep 8 11:10 ls.sh

Jól látható az alma.sh link-ünk. Innentől az alma.sh parancsot is végrehajthatjuk. 🙂 Ugyanaz, mint az ls.sh. A sor elején az l betű jelzi, hogy szimbolikus linkről van szó, nem önálló file-ról.

Szólni kellene még az úgynevezett setuid illetve setgid bit-ről, és a sticky bit-ről.

gvamosi@gergo1:~$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 63736 Jul 27 2018 /usr/bin/passwd

Itt látható a setuid bit, az s, ami azt jelenti, hogy a tulajdonosa, azaz a root user, a rendszergazda uid-jével – ez egyébként a nulla: 0 – fog futni a passwd parancs. (A passwd paranccsal mellesleg jelszót lehet változtatni, és azért kell ez a setuid módosítás, hogy a saját jelszavát bárki meg tudja változtatni a régi jelszava ismeretében.) 🙂 A setuid flag nem hatásos könyvtárakra!

A setgid bit vonatkozhat file-ra, illetve könyvtárra. Ha file-t jelöl, akkor a futáskor kapott ID-je a setgid csoport id lesz. Amennyiben könyvtárra vonatkozik, úgy az alatta létrehozott file-ok és könyvtárak is megkapják az adott csoport jogait, tehát pl. minden csoporttag tudni fogja írni illetve törölni az adott könyvtárban lévő bejegyzéseket. 🙂

A sticky bit a /tmp könyvtárra hasznos. Ez egy korábbi rendszer-hézagot foltozott be, egy sebezhetőséget szüntetett meg, amikor kitalálták. A sticky bit-tel megjelölt könyvtárban csak a tulajdonos módosíthatja a file-jait.

gvamosi@gergo1:~$ ls -ld /tmp
drwxrwxrwt 27 root root 299008 Sep 8 11:39 /tmp

Jól látható, hogy a rendszer ideiglenes könyvtárát bárki írhatja, azaz törölheti is! Ezért kellett ide a sticky bit. 🙂

Beszélnünk kell még a chmod parancsról. Bit szinten, bináris módon is működik, számokkal.

gvamosi@gergo1:~$ mkdir test
gvamosi@gergo1:~$ chmod 2775 test
gvamosi@gergo1:~$ ls -ld test
drwxrwsr-x 2 gvamosi gvamosi 4096 Sep 8 11:42 test

A setuid/setgid/sticky bit az első helyen a 4/2/1, illetve hasonlóképpen van a 775 is. Mit értünk bináris ábrázolás alatt? Egész egyszerűen a kettő hatványokat. Ezek: 2^0=1 (kettő a nulladik hatványon és így tovább), 2^1=2, 2^2=4. És jobbról balra kell számolni. Tehát az rwx bitekre: 421, az összegük 4+2+1=7 és r-x-re: 4+1=5. Ennyi. 😀

Hasznos linkek:

https://hu.wikipedia.org/wiki/Kettes_sz%C3%A1mrendszer

https://linuxconfig.org/how-to-use-special-permissions-the-setuid-setgid-and-sticky-bits