Hackerek, figyelem! Mik azok a /etc/passwd és a /etc/group file-ok? :)

Nézzünk meg két sort a passwd file-ból!

root:x:0:0:root:/root:/bin/bash
gvamosi:x:1000:1000:gvamosi,,,:/home/gvamosi:/bin/bash

A root user, a rendszergazda szerepel benne az első sorban, 0-ás uid-del és gid-del (felhasználó id és csoport id), illetve saját magam, mint felhasználó, az első, felhasználók számára kiosztott uid-del és gid-del, az 1000-essel.

Az itt szereplő gid a felhasználó alap csoport azonosítója. Az összes többi csoport-tagságot a groups paranccsal lehet lekérdezni.

gvamosi@gergo1:~$ groups
gvamosi cdrom floppy audio dip video plugdev netdev bluetooth scanner kvm libvirt libvirt-qemu

Látható, hogy jónéhány csoport-jogosultsággal is rendelkezek, mint gvamosi user. 🙂 Nézzük, hogy van ez lekönyvelve a group file-ban!

gvamosi@gergo1:~$ cat /etc/group
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
mail:x:8:
news:x:9:
uucp:x:10:
man:x:12:
proxy:x:13:
kmem:x:15:
dialout:x:20:
fax:x:21:
voice:x:22:
cdrom:x:24:gvamosi
floppy:x:25:gvamosi
tape:x:26:
sudo:x:27:
audio:x:29:pulse,gvamosi
dip:x:30:gvamosi
www-data:x:33:
backup:x:34:
operator:x:37:
list:x:38:
irc:x:39:
src:x:40:
gnats:x:41:
shadow:x:42:
utmp:x:43:
video:x:44:gvamosi
sasl:x:45:
plugdev:x:46:gvamosi
staff:x:50:
games:x:60:
users:x:100:
nogroup:x:65534:
systemd-journal:x:101:
systemd-timesync:x:102:
systemd-network:x:103:
systemd-resolve:x:104:
input:x:106:
crontab:x:107:
netdev:x:108:gvamosi
uuidd:x:109:
rtkit:x:110:
avahi-autoipd:x:111:
messagebus:x:112:
ssh:x:113:
bluetooth:x:114:gvamosi
geoclue:x:115:
pulse:x:116:
pulse-access:x:117:
scanner:x:118:saned,gvamosi
avahi:x:119:
colord:x:120:
saned:x:121:
Debian-gdm:x:122:
gvamosi:x:1000:
ssl-cert:x:123:
mysql:x:124:
kvm:x:125:gvamosi
libvirt:x:126:gvamosi
libvirt-qemu:x:64055:libvirt-qemu,gvamosi
sambashare:x:127:
render:x:105:
tss:x:128:
rdma:x:129:
systemd-coredump:x:999:

Jól látható, hogy a gvamosi felhasználó több csoportnál szerepel tagként.

És hogy hol vannak könyvelve a jelszavak – természetesen kódoltan? Ezek helye az ún. shadow file. Na ez már csak root-ként, azaz rendszergazdaként olvasható. 🙂

gvamosi@gergo1:~$ l /etc/shadow
-rw-r----- 1 root shadow 1467 Jun 19 04:01 /etc/shadow

Egy tetszőleges file vagy könyvtár tulajdonosát a chown, csoport tulajdonosát pedig a chgrp paranccsal tudjuk beállítani.

gvamosi@gergo1:~$ chgrp kvm tty3_terminal_alma.txt
gvamosi@gergo1:~$ ls -l tty3_terminal_alma.txt
-rw-r–r– 1 gvamosi kvm 497 Sep 4 07:09 tty3_terminal_alma.txt

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