110.1 Lecke 1
Tanúsítvány: |
LPIC-1 |
---|---|
Verzió: |
5.0 |
Témakör: |
110 Biztonság |
Fejezet: |
110.1 Biztonsági adminisztrációs feladatok elvégzése |
Lecke: |
1/1 |
Bevezetés
A biztonság elengedhetetlen a rendszeradminisztrációban. Jó Linux rendszergazdaként számos dolgot kell szemmel tartanunk, például a fájlok speciális jogosultságait, a felhasználói jelszavak öregedését, a nyitott portokat és socketeket, a rendszer erőforrásainak korlátozását, a bejelentkezett felhasználók kezelését és a jogosultságok kiterjesztését a su
és sudo
segítségével. Ebben a leckében ezek közül a témák közül mindegyiket áttekintjük.
SUID és SGID beállítású fájlok ellenőrzése
A hagyományos read (olvasás), write (írás) és execute (futtatás, végrehajtás) jogosultságok mellett a Linux rendszerben a fájlok speciális jogosultságokkal is rendelkezhetnek, mint például a SUID vagy a SGID bitek.
A SUID bit lehetővé teszi, hogy a fájlt a fájl tulajdonosának jogosultságaival lehessen végrehajtani. Számszerűen 4000
, szimbolikusan pedig s
vagy S
jelöli a tulajdonos execute jogosultságának bitjén. Klasszikus példa a SUID jogosultsággal rendelkező futtatható fájlra a passwd
:
carol@debian:~$ ls -l /usr/bin/passwd -rwsr-xr-x 1 root root 63736 jul 27 2018 /usr/bin/passwd
A kisbetűs s
az rws
-ben a SUID jelenlétét jelzi a fájlban — a execute jogosultsággal együtt. A nagybetűs S
ehelyett (rwS
) azt jelenti, hogy az alapjául szolgáló execute joogosultság nincs beállítva.
Note
|
A |
Másik részről az SGID bitet mind fájlokra, mind mappákra be lehet állítani. A fájlok esetében a viselkedése megegyezik a SUID-éval, de a jogosultságok a csoport tulajdonosához tartoznak. Ha azonban egy mappán van beállítva, akkor a mappában létrehozott összes fájl a mappa csoportjának tulajdonjogát örökli. A SUID-hoz hasonlóan az SGID-t is a csoport execute jogosultsági bitjén lévő s
vagy S
jelképezi. Számszerű jelölése 2000
. Az SGID-t egy mappán a chmod
használatával állíthatjuk be. A hagyományos jogosultságokhoz (esetünkben 755
) hozzá kell adni a 2
(SGID) értéket:
carol@debian:~$ ls -ld shared_directory drwxr-xr-x 2 carol carol 4096 may 30 23:55 shared_directory carol@debian:~$ sudo chmod 2755 shared_directory/ carol@debian:~$ ls -ld shared_directory drwxr-sr-x 2 carol carol 4096 may 30 23:55 shared_directory
A SUID és SGID beállítással rendelkező fájlok kereséséhez használhatjuk a find
parancsot és a -perm
opciót. Numerikus és szimbolikus értékeket egyaránt megadhatunk. Az értékek — viszont — önmagukban is átadhatók, vagy egy kötőjel (-
) vagy egy perjel (/
) előzi meg őket. A jelentés a következő:
-perm numeric-value
or-perm symbolic-value
-
speciális jogosultsággal rendelkező fájlok kizárólagos keresése
-perm -numeric-value
or-perm -symbolic-value
-
speciális és egyéb jogosultságokkal rendelkező fájlok keresése
-perm /numeric-value
or-perm /symbolic-value
-
speciális vagy egyéb jogosultságokkal rendelkező fájlok keresése
Ha például a jelenlegi mappában csak SUID beállítású fájlokat keresünk, akkor a következő parancsot használjuk:
carol@debian:~$ find . -perm 4000 carol@debian:~$ touch file carol@debian:~$ chmod 4000 file carol@debian:~$ find . -perm 4000 ./file
Figyeljük meg, hogy - mivel nem volt egyetlen olyan fájl sem, amely kizárólag a SUID-et tartalmazta volna — létrehoztunk egyet, hogy látható legyen a kimenet. Ugyanezt a parancsot szimbolikus jelöléssel is futtathatjuk:
carol@debian:~$ find . -perm u+s ./file
A SUID-nak megfelelő fájlok kereséséhez (függetlenül minden más jogosultságtól) az /usr/bin/
mappában a következő parancsok valamelyikét használhatjuk:
carol@debian:~$ sudo find /usr/bin -perm -4000 /usr/bin/umount /usr/bin/newgrp /usr/bin/gpasswd /usr/bin/chfn /usr/bin/mount /usr/bin/passwd /usr/bin/chsh /usr/bin/sudo /usr/bin/su carol@debian:~$ sudo find /usr/bin -perm -u+s /usr/bin/umount /usr/bin/newgrp /usr/bin/gpasswd /usr/bin/chfn /usr/bin/mount /usr/bin/passwd /usr/bin/chsh /usr/bin/sudo /usr/bin/su
Ha ugyanabban a mappában lévő fájlokat keresnénk az SGID bit beállításával, akkor futtassuk a find /usr/bin/ -perm -2000
vagy a find /usr/bin/ -perm -g+s
parancsot.
Végül, a két speciális jogosultsággal rendelkező fájlok megtalálásához adjuk hozzá a 4
-et és a 2
-t, és használjuk a /
-t:
carol@debian:~$ sudo find /usr/bin -perm /6000 /usr/bin/dotlock.mailutils /usr/bin/umount /usr/bin/newgrp /usr/bin/wall /usr/bin/ssh-agent /usr/bin/chage /usr/bin/dotlockfile /usr/bin/gpasswd /usr/bin/chfn /usr/bin/mount /usr/bin/passwd /usr/bin/chsh /usr/bin/expiry /usr/bin/sudo /usr/bin/bsd-write /usr/bin/crontab /usr/bin/su
Jelszómenedzselés és öregedés (aging)
Mint fentebb említettük, normál felhasználóként a passwd
segédprogrammal megváltoztathatjuk a saját jelszavunkat. Ezen kívül a -S
vagy --status
kapcsolót is használhatjuk, így státuszinformációkat kapva a fiókunkról:
carol@debian:~$ passwd -S carol P 12/07/2019 0 99999 7 -1
Az alábbiakban a kimenet hét mezőjét mutatjuk be:
carol
-
A felhasználó bejelentkezési neve.
P
-
Azt jelzi, hogy a felhasználó érvényes jelszóval rendelkezik (
P
). Más lehetséges értékek:L
a zárolt (locked) jelszó,NP
pedig a jelszó hiánya (no password). 12/07/2019
-
Az utolsó jelszóváltoztatás dátuma.
0
-
Minimális életkor napokban (a jelszóváltoztatások közötti minimális napok száma). A
0
érték azt jelenti, hogy a jelszó bármikor megváltoztatható. 99999
-
Maximális életkor napokban (a jelszó maximális érvényességi ideje). A
99999
érték kikapcsolja a jelszó lejáratának lehetőségét. 7
-
Figyelmeztetési időszak napokban (a jelszó lejárta előtti napok száma, amikor a felhasználó figyelmeztetést kap).
-1
-
A jelszó inaktív időszaka napokban (a jelszó lejárta utáni inaktív napok száma a fiók zárolása előtt). A
-1
érték eltörli a fiók inaktivitását.
A fiókok állapotáról szóló jelentésen kívül a passwd
parancsot root felhasználóként fogjuk használni fiókok alapvető karbantartására. A -l
, -u
, -e
és -d
kapcsolókkal zárolhatjuk és feloldhatjuk a fiókokat, kényszeríthetjük a felhasználót, hogy a következő bejelentkezéskor megváltoztassa jelszavát, illetve törölhetjük a felhasználó jelszavát.
Ezen opciók teszteléséhez célszerű ezen a ponton bevezetni a su
parancsot. A su
parancs segítségével a bejelentkezés során felhasználót válthatunk. Így például használjuk a passwd
-t root-ként, hogy zároljuk carol`jelszavát. Ezután váltsunk át `carol
-ra, és ellenőrizzük a fiókunk állapotát, hogy meggyőződjünk arról, hogy a jelszó — valóban — zárolva van (L
), és nem lehet megváltoztatni. Végül, visszatérve a root felhasználóhoz, feloldjuk carol
jelszavát:
root@debian:~# passwd -l carol passwd: password expiry information changed. root@debian:~# su - carol carol@debian:~$ passwd -S carol L 05/31/2020 0 99999 7 -1 carol@debian:~$ passwd Changing password for carol. Current password: passwd: Authentication token manipulation error passwd: password unchanged carol@debian:~$ exit logout root@debian:~# passwd -u carol passwd: password expiry information changed.
Alternatív megoldásként a usermod
paranccsal is zárolhatjuk és feloldhatjuk a felhasználó jelszavát:
carol
jelszavának zárolása-
usermod -L carol
vagyusermod --lock carol
. carol
jelszavának feloldása-
usermod -U carol
vagyusermod --unlock carol
.
Note
|
Az |
A passwd
és a usermod
mellett a legközvetlenebb parancs a jelszavak és fiókok öregedésével kapcsolatban a chage
(“change age”). Root felhasználóként a chage
parancsnak átadhatjuk az -l
(vagy --list
) kapcsolót, amelyet egy felhasználónév követ. Ezzel az adott felhasználó aktuális jelszavát és fiókjának lejárati adatait kiírja a képernyőre; normál felhasználóként pedig a saját adatainkat tekinthetjük meg:
carol@debian:~$ chage -l carol Last password change : Aug 06, 2019 Password expires : never Password inactive : never Account expires : never Minimum number of days between password change : 0 Maximum number of days between password change : 99999 Number of days of warning before password expires : 7
Kapcsolók nélkül, egyszerűen csak egy felhasználónév megadásával a chage
interaktívan fog viselkedni:
root@debian:~# chage carol Changing the aging information for carol Enter the new value, or press ENTER for the default Minimum Password Age [0]: Maximum Password Age [99999]: Last Password Change (YYYY-MM-DD) [2020-06-01]: Password Expiration Warning [7]: Password Inactive [-1]: Account Expiration Date (YYYY-MM-DD) [-1]:
A különböző chage
beállítások módosításának lehetőségei a következők:
-m days username
vagy--mindays days username
-
Adjuk meg a jelszóváltoztatások közötti minimális napok számát (pl.:
chage -m 5 carol
). A0
érték lehetővé teszi a felhasználó számára, hogy bármikor megváltoztassa jelszavát. -M days username
vagy--maxdays days username
-
Adjuk meg a jelszó maximális érvényességi idejét (pl.:
chage -M 30 carol
). A jelszó lejárati idejének tiltása esetén ennek az opciónak99999
értéket kell, hogy adjunk. -d days username
vagy--lastday days username
-
Adjuk meg a jelszó utolsó módosítása óta eltelt napok számát (pl.:
chage -d 10 carol
). A0
érték arra kényszeríti a felhasználót, hogy a következő bejelentkezéskor megváltoztassa a jelszavát. -W days username
vagy--warndays days username
-
Adjuk meg, hogy a felhasználó hány napig kapjon emlékeztetőt a jelszava lejártáról.
-I days username
vagy--inactive days username
-
Adjuk meg a jelszó lejárta utáni inaktív napok számát (pl.:
chage -I 10 carol
) — ez ugyanaz, mint ausermod -f
vagyusermod --inactive
. Ha a napok száma letelt, a fiók zárolásra kerül. A0
értékkel azonban a fiók nem lesz zárolva. -E date username
vagy--expiredate date username
-
Adjuk meg azt a dátumot (vagy a napok számát az _epoch _ óta — 1970. január 1.), amikor a fiók zárolásra kerül. Ezt általában
YYYY-MM-DD
formátumban adjuk meg (pl.:chage -E 2050-12-13 carol
).
Note
|
A |
Nyitott portok felfedezése
Ha a nyitott portok ellenőrzéséről van szó, négy hatékony segédprogram érhető el a legtöbb Linux rendszeren: az lsof
, fuser
, netstat
és nmap
. Ebben a szakaszban ezekkel foglalkozunk.
Az lsof
a “list open files” rövidítése, ami nem kis dolog, tekintve, hogy — Linux esetén — minden egy fájl. Valójában, ha beírjuk a terminálba az lsof
parancsot, egy nagy listát kapunk a hagyományos fájlokról, eszközfájlokről, socketekről stb. A lecke kedvéért azonban elsősorban a portokra fogunk koncentrálni. Az összes “Internet” hálózati fájl listájának kiírásához futtassuk az lsof
parancsot az -i
kapcsolóval:
root@debian:~# lsof -i COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME dhclient 357 root 7u IPv4 13493 0t0 UDP *:bootpc sshd 389 root 3u IPv4 13689 0t0 TCP *:ssh (LISTEN) sshd 389 root 4u IPv6 13700 0t0 TCP *:ssh (LISTEN) apache2 399 root 3u IPv6 13826 0t0 TCP *:http (LISTEN) apache2 401 www-data 3u IPv6 13826 0t0 TCP *:http (LISTEN) apache2 402 www-data 3u IPv6 13826 0t0 TCP *:http (LISTEN) sshd 557 root 3u IPv4 14701 0t0 TCP 192.168.1.7:ssh->192.168.1.4:60510 (ESTABLISHED) sshd 569 carol 3u IPv4 14701 0t0 TCP 192.168.1.7:ssh->192.168.1.4:60510 (ESTABLISHED)
A bootpc
szolgáltatáson kívül — amit a DHCP használ — az eredmény két kapcsolatot váró szolgáltatást mutat — az ssh
és az Apache webszerver (http
) — valamint két létrehozott SSH kapcsolatot. Megadhatunk egy adott hostot a @ip-address
jelöléssel, hogy ellenőrizzük a kapcsolatait:
root@debian:~# lsof -i@192.168.1.7 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 557 root 3u IPv4 14701 0t0 TCP 192.168.1.7:ssh->192.168.1.4:60510 (ESTABLISHED) sshd 569 carol 3u IPv4 14701 0t0 TCP 192.168.1.7:ssh->192.168.1.4:60510 (ESTABLISHED)
Note
|
Ha csak az IPv4 és IPv6 hálózati fájlokat szeretnénk látni, használjuk az |
Hasonlóképpen szűrhetünk portok szerint is, ha az -i
(vagy -i@ip-cím
) kapcsolót adjuk meg a :port
argumentumnak:
root@debian:~# lsof -i :22 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 389 root 3u IPv4 13689 0t0 TCP *:ssh (LISTEN) sshd 389 root 4u IPv6 13700 0t0 TCP *:ssh (LISTEN) sshd 557 root 3u IPv4 14701 0t0 TCP 192.168.1.7:ssh->192.168.1.4:60510 (ESTABLISHED) sshd 569 carol 3u IPv4 14701 0t0 TCP 192.168.1.7:ssh->192.168.1.4:60510 (ESTABLISHED)
Több portot vesszővel kell elválasztani (a tartományokat pedig kötőjellel):
root@debian:~# lsof -i@192.168.1.7:22,80 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 705 root 3u IPv4 13960 0t0 TCP 192.168.1.7:ssh->192.168.1.4:44766 (ESTABLISHED) sshd 718 carol 3u IPv4 13960 0t0 TCP 192.168.1.7:ssh->192.168.1.4:44766 (ESTABLISHED)
Note
|
Az |
A hálózati parancsok listáján a következő a fuser
. A fő célja a “file’s user” (fájl felhasználójának) a megtalálása — ami azt jelenti, hogy tudni kell, hogy mely folyamatok milyen fájlokhoz férnek hozzá; ezen kívül néhány egyéb információt is megad, többek között a hozzáférés típusát. Például az aktuális mappa ellenőrzéséhez elegendő az fuser .
futtatása, azonban ha egy kicsit több információt szeretnénk kapni, akkor célszerű a verbose (-v
vagy --verbose
) kapcsolót használni:
root@debian:~# fuser . /root: 580c root@debian:~# fuser -v . USER PID ACCESS COMMAND /root: root 580 ..c.. bash
Bontsuk fel a kimenetet:
- File
-
A fájl, amiről információt kapunk (
/root
). USER
oszlop-
A fájl tulajdonosa (
root
). PID
oszlop-
A folyamat azonosítója (
580
). ACCESS
oszlop-
A hozzáférés típusa (
..c..
). Az alábbiak:c
-
Az aktuális mappa.
e
-
Futtatás alatt álló program.
f
-
Megnyitott fájl (az alapértelmezett megjelenítési módban kimarad).
F
-
Írásra megnyitott fájl (az alapértelmezett megjelenítési módban kimarad).
r
-
root mappa.
m
-
mmap’ed fájl vagy megosztott könyvtár.
.
-
Placeholder (az alapértelmezett megjelenítési módban kimarad).
COMMAND
oszlop-
A fájlhoz kapcsolódó parancs (
bash
).
Az -n
(vagy --namespace
) kapcsolóval a hálózati portokról/socketekről kaphatunk információt. Meg kell adni a hálózati protokollt és a port számát is. Az Apache webszerverre vonatkozó információk lekérdezéséhez például a következő parancsot kell futtatni:
root@debian:~# fuser -vn tcp 80 USER PID ACCESS COMMAND 80/tcp: root 402 F.... apache2 www-data 404 F.... apache2 www-data 405 F.... apache2
Note
|
A |
Térjünk át a netstat
-ra. A netstat
egy nagyon sokoldalú hálózati eszköz, amelyet leginkább “network statistics” (hálózati statisztikák) megjelenítésére használunk.
Kapcsolók nélkül futtatva a netstat
mind az aktív internetkapcsolatokat, mind a Unix socketeket megjeleníti. A listázás mérete miatt érdemes a kimenetet a less
-en keresztül megjeleníteni egy pipe használatával:
carol@debian:~$ netstat |less Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 192.168.1.7:ssh 192.168.1.4:55444 ESTABLISHED Active UNIX domain sockets (w/o servers) Proto RefCnt Flags Type State I-Node Path unix 2 [ ] DGRAM 10509 /run/systemd/journal/syslog unix 3 [ ] DGRAM 10123 /run/systemd/notify (...)
Ha csak a “hallgató” portokat és socketeket akarjuk listázni, akkor használjuk az -l
vagy a --listening
kapcsolókat. A -t
/--tcp
és az -u
/--udp
kapcsolókkal a TCP és UDP protokollok szerint szűrhetünk (ezek kombinálhatók is ugyanabban a parancsban). Hasonlóképpen, az -e
/--extend
további információkat jelenít meg:
carol@debian:~$ netstat -lu Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State udp 0 0 0.0.0.0:bootpc 0.0.0.0:* carol@debian:~$ netstat -lt Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN tcp 0 0 localhost:smtp 0.0.0.0:* LISTEN tcp6 0 0 [::]:http [::]:* LISTEN tcp6 0 0 [::]:ssh [::]:* LISTEN tcp6 0 0 localhost:smtp [::]:* LISTEN carol@debian:~$ netstat -lute Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State User Inode tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN root 13729 tcp 0 0 localhost:smtp 0.0.0.0:* LISTEN root 14372 tcp6 0 0 [::]:http [::]:* LISTEN root 14159 tcp6 0 0 [::]:ssh [::]:* LISTEN root 13740 tcp6 0 0 localhost:smtp [::]:* LISTEN root 14374 udp 0 0 0.0.0.0:bootpc 0.0.0.0:* root 13604
Ha elhagyjuk az l
kapcsolót, akkor csak a már létrehozott kapcsolatok jelennek meg:
carol@debian:~$ netstat -ute Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State User Inode tcp 0 0 192.168.1.7:ssh 192.168.1.4:39144 ESTABLISHED root 15103
Ha csak a portokra és hostokra vonatkozó numerikus információkat akarjuk látni, akkor a parancs a -n
vagy --numeric
kapcsolóval csak a portok számát és az IP-címeket írja ki. Figyeljük meg, hogy az ssh
a fenti parancshoz hozzáadva a -n
-t 22
-re változik:
carol@debian:~$ netstat -uten Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State User Inode tcp 0 0 192.168.1.7:22 192.168.1.4:39144 ESTABLISHED 0 15103
Láthatjuk, hogy nagyon hasznos és produktív netstat
parancsokat készíthetünk néhány opció kombinálásával. Nézzünk szét a man oldalakon, hogy többet megtudjunk, és megtaláljuk az igényeinknek leginkább megfelelő kombinációkat.
Végül bemutatjuk az nmap
-ot, vagyis a “network mapper”-t. Ez egy másik nagyon hatékony segédprogram, ez a port scanner egy IP-cím vagy hostnév megadásával futtatható:
root@debian:~# nmap localhost Starting Nmap 7.70 ( https://nmap.org ) at 2020-06-04 19:29 CEST Nmap scan report for localhost (127.0.0.1) Host is up (0.0000040s latency). Other addresses for localhost (not scanned): ::1 Not shown: 998 closed ports PORT STATE SERVICE 22/tcp open ssh 80/tcp open http Nmap done: 1 IP address (1 host up) scanned in 1.58 seconds
Egyetlen hosttól eltekintve az nmap
lehetővé teszi a szkennelést:
- több host esetén
-
szóközökkel elválasztva (pl.:
nmap localhost 192.168.1.7
). - host tartományok esetén
-
kötőjellel elválasztva (pl.:
nmap 192.168.1.3-20
). - alhálózatok esetén
-
helyettesítő karakter vagy a CIDR-jelölés használatával (pl.:
nmap 192.168.1.*
vagynmap 192.168.1.0/24
). Ki is zárhatunk bizonyos hostokat (pl.:nmap 192.168.1.0/24 --exclude 192.168.1.7
).
Egy adott port vizsgálatához használjuk a -p
kapcsolót, majd a port számát vagy a szolgáltatás nevét (az nmap -p 22
és az nmap -p ssh
ugyanazt a kimenetet adja):
root@debian:~# nmap -p 22 localhost Starting Nmap 7.70 ( https://nmap.org ) at 2020-06-04 19:54 CEST Nmap scan report for localhost (127.0.0.1) Host is up (0.000024s latency). Other addresses for localhost (not scanned): ::1 PORT STATE SERVICE 22/tcp open ssh Nmap done: 1 IP address (1 host up) scanned in 0.22 seconds
Több portot vagy porttartományt is vizsgálhatunk vesszők és kötőjelek használatával:
root@debian:~# nmap -p ssh,80 localhost Starting Nmap 7.70 ( https://nmap.org ) at 2020-06-04 19:58 CEST Nmap scan report for localhost (127.0.0.1) Host is up (0.000051s latency). Other addresses for localhost (not scanned): ::1 PORT STATE SERVICE 22/tcp open ssh 80/tcp open http Nmap done: 1 IP address (1 host up) scanned in 0.22 seconds
root@debian:~# nmap -p 22-80 localhost Starting Nmap 7.70 ( https://nmap.org ) at 2020-06-04 19:58 CEST Nmap scan report for localhost (127.0.0.1) Host is up (0.000011s latency). Other addresses for localhost (not scanned): ::1 Not shown: 57 closed ports PORT STATE SERVICE 22/tcp open ssh 80/tcp open http Nmap done: 1 IP address (1 host up) scanned in 1.47 seconds
Két másik fontos és hasznos nmap
kapcsoló:
-F
-
Gyors szkennelés végrehajtása a 100 leggyakoribb porton.
-v
-
Részletes kimenet (a
-vv
még részletesebb kimenetet ad).
Note
|
Az |
A felhasználók bejelentkezésének, folyamatainak és memóriahasználatának korlátai
A Linux rendszer erőforrásai nem korlátlanok, így — rendszergazdaként — biztosítani kell a megfelelő egyensúlyt az erőforrások felhasználói korlátozása (user limits) és az operációs rendszer megfelelő működése között. Az ulimit
segíthet ebben a feladatban.
Az ulimit
a lágy (soft) és kemény (hard) limitekkel foglalkozik, amelyeket a -S
és a -H
kapcsolók határoznak meg. Kapcsolók és argumentumok nélkül futtatva az ulimit
az aktuális felhasználó soft fájlblokkjait jeleníti meg:
carol@debian:~$ ulimit unlimited
A -a
kapcsolóval az ulimit
az összes aktuális soft limitet megjeleníti (ugyanúgy, mint a -Sa
); az összes aktuális hard limit megjelenítéséhez pedig használjuk a -Ha
kapcsolót:
carol@debian:~$ ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 (...) carol@debian:~$ ulimit -Ha core file size (blocks, -c) unlimited data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 (...)
A rendelkezésre álló shell-erőforrásokat olyan kapcsolókkal adhatjuk meg, mint például:
-b
-
a socket maximális puffermérete
-f
-
a shell és gyermekei által írt fájlok maximális mérete
-l
-
a memóriába zárolható maximális méret
-m
-
maximális rezidens beállított méret (RSS) — a memória aktuális része, amelyet egy folyamat a főmemóriában (RAM) tart
-v
-
a virtuális memória maximális mérete
-u
-
az egy felhasználó számára elérhető folyamatok maximális száma
Így a határértékek megjelenítéséhez az ulimit
parancsot kell használni, amelyet vagy az -S
(soft) vagy a -H
(hard) és az erőforrás kapcsoló követ; ha sem az -S
, sem a -H
nem szerepel, akkor a soft limitek jelennek meg:
carol@debian:~$ ulimit -u 10000 carol@debian:~$ ulimit -Su 10000 carol@debian:~$ ulimit -Hu 15672
Hasonlóképpen, ha egy adott erőforrásra új limiteket szeretnénk beállítani, akkor vagy az -S
vagy a -H
értéket adjuk meg, majd a megfelelő erőforrás kapcsolóját és az új értéket. Ez az érték lehet egy szám vagy a speciális szavak: soft
(jelenlegi soft limit), hard
(jelenlegi hard limit) vagy unlimited
(nincs limit (no limit)). Ha sem az -S
, sem a -H
érték nincs megadva, akkor mindkét határérték be lesz állítva. Először is olvassuk ki például a shell és gyermekei által írt fájlok aktuális maximális méretének értékét:
root@debian:~# ulimit -Sf unlimited root@debian:~# ulimit -Hf unlimited
Most pedig változtassuk meg az értéket unlimited
-ről 500
blokkra anélkül, hogy megadnánk az S
vagy a H
értéket. Figyeljük meg, hogy mind a soft, mind a hard limitek megváltoznak:
root@debian:~# ulimit -f 500 root@debian:~# ulimit -Sf 500 root@debian:~# ulimit -Hf 500
Végül csak a soft limitet csökkentjük 200
blokkra:
root@debian:~# ulimit -Sf 200 root@debian:~# ulimit -Sf 200 root@debian:~# ulimit -Hf 500
A hard limiteket csak a root felhasználó növelheti. Másrészt a normál felhasználók csökkenthetik a hard limiteket, és növelhetik a soft limiteket a hard limitek értékéig. Ahhoz, hogy az új határértékek az újraindítások során is megmaradjanak, be kell írni őket az /etc/security/limits.conf
fájlba. Ez az a fájl, amelyet a rendszergazda is használ az egyes felhasználókra vonatkozó korlátozások alkalmazására.
Note
|
Figyelmeztetünk, hogy nincs |
A bejelentkezett felhasználók kezelése
Rendszergazdaként egy másik feladatunk a bejelentkezett felhasználók nyomon követése. Három segédprogram van, amely segíthet ezekben a feladatokban: last
, who
és w
.
A last
kiírja az utoljára bejelentkezett felhasználók listáját, tetején a legfrissebb információkkal:
root@debian:~# last carol pts/0 192.168.1.4 Sat Jun 6 14:25 still logged in reboot system boot 4.19.0-9-amd64 Sat Jun 6 14:24 still running mimi pts/0 192.168.1.4 Sat Jun 6 12:07 - 14:24 (02:16) reboot system boot 4.19.0-9-amd64 Sat Jun 6 12:07 - 14:24 (02:17) (...) wtmp begins Sun May 31 14:14:58 2020
A csonka listát figyelembe véve információt kapunk a rendszer két utolsó felhasználójáról. Az első két sor a carol
felhasználóról, a következő két sor pedig a mimi
felhasználóról szól. Az információ a következő:
-
A
carol
felhasználó apts/0
terminálban a192.168.1.4
hostról elindította a munkamenetétSat Jun 6
(június 6-án szombaton)14:25
-kor és még mindiglogged in
(be van jelentkezve). A rendszer — a kernel4.19.0-9-amd64
használatával —Sat Jun 6
(június 6-án szombaton)14:24
-kor lett elindítva (reboot system boot
) ésstill running
(még mindig fut). -
A
mimi
felhasználó apts/0
terminálban a192.168.1.4
hostról elindította a munkamenetétSat Jun 6
(június 6-án szombaton)12:07
-kor és kijelentezett14:24
-kor (a munkamenet(02:16)
órán át tartott). A rendszer — a kernel4.19.0-9-amd64
használatával —Sat Jun 6
(június 6-án szombaton)12:07
-kor lett elindítva (reboot system boot
) és14:24
-kor kikapcsolva ((02:17)
-en keresztül futott).
Note
|
A |
Átadhatjuk a last
-nak a felhasználónevet, így csak az adott felhasználóhoz tartozó bejegyzések jelennek meg:
root@debian:~# last carol carol pts/0 192.168.1.4 Sat Jun 6 14:25 still logged in carol pts/0 192.168.1.4 Sat Jun 6 12:07 - 14:24 (02:16) carol pts/0 192.168.1.4 Fri Jun 5 00:48 - 01:28 (00:39) (...)
Ami a második oszlopot (terminal) illeti, a pts
a Pseudo Terminal Slave-t jelenti - szemben a valódi TeleTYpewriter vagy tty
terminállal; a 0
pedig az elsőre utal (a számolás nulláról indul).
Note
|
A rossz bejelentkezési kísérletek ellenőrzéséhez futtassuk a |
A who
és w
segédprogramok az aktuálisan bejelentkezett felhasználókra koncentrálnak és eléggé hasonlóak. Az előbbi azt mutatja meg, hogy ki van bejelentkezve, míg az utóbbi azt is, hogy éppen mit csinálnak.
Opciók nélküli futtatás esetén a who
négy oszlopot jelenít meg a bejelentkezett felhasználó, a terminál, a dátum és az idő, valamint a hostnév szerint:
root@debian:~# who carol pts/0 2020-06-06 17:16 (192.168.1.4) mimi pts/1 2020-06-06 17:28 (192.168.1.4)
A who
egy sor kapcsolót fogad el, amelyek közül kiemelhetjük a következőket:
-b
,--boot
-
Az utolsó rendszerindítás idejének megjelenítése.
-r
,--runlevel
-
Az aktuális runlevel megjelenítése.
-H
,--heading
-
Az oszlopok fejlécének a megjelenítése.
A who
-hoz hasonlítva a w
egy kicsit részletesebb kimenetet ad:
root@debian:~# w 17:56:12 up 40 min, 2 users, load average: 0.04, 0.12, 0.09 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT carol pts/0 192.168.1.4 17:16 1.00s 0.15s 0.05s sshd: carol [priv] mimi pts/1 192.168.1.4 17:28 15:08 0.05s 0.05s -bash
A felső sorban az aktuális időpontról (17:56:12
), arról, hogy mióta működik a rendszer (up 40 min
), a jelenleg bejelentkezett felhasználók számáról (2 users
) és a terhelés átlagáról (load average: 0.04, 0.12, 0.09
) kapunk információt. Ezek az értékek a futtatási sorban lévő jobok számát jelentik az elmúlt 1, 5, illetve 15 perc átlagában.
Ezután nyolc oszlopot találunk; nézzük meg őket lebontva:
USER
-
A felhasználó bejelentkezési neve.
TTY
-
A felhasználó által használt terminál neve.
FROM
-
A remote host, ahonnan a felhasználó bejelentkezett.
LOGIN@
-
A bejelentkezés ideje.
IDLE
-
Holtidő (idle time).
JCPU
-
A tty-hez csatlakozó összes folyamat által felhasznált idő (beleértve a jelenleg háttérben futó jobokat is).
PCPU
-
Az aktuális folyamat által felhasznált idő (ez a folyamat az, ami a
WHAT
alatt látható). WHAT
-
Az aktuális folyamat parancssora.
Akárcsak a who
esetén, a w
-nek is adhatunk át felhasználóneveket:
root@debian:~# w mimi 18:23:15 up 1:07, 2 users, load average: 0.00, 0.02, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT mimi pts/1 192.168.1.4 17:28 9:23 0.06s 0.06s -bash
Alapvető sudo
konfiguráció és használat
Amint azt már említettük ebben a leckében, a su
segítségével a rendszer bármely más felhasználójára válthatunk, ha megadjuk a célfelhasználó jelszavát. Ha a root felhasználó jelszavát terjesztik vagy sok felhasználó ismeri, az veszélyezteti a rendszert, ezáltal pedig egy nagyon rossz biztonsági gyakorlat. A su
alapvető használata a su - célfelhasználónév
. A root-ra való váltásnál a célfelhasználónév megadása opcionális:
carol@debian:~$ su - root Password: root@debian:~# exit logout carol@debian:~$ su - Password: root@debian:~#
A kötőjel (-
) használata biztosítja, hogy a célfelhasználó környezete betöltődjön. Enélkül a régi felhasználó környezete marad meg:
carol@debian:~$ su Password: root@debian:/home/carol#
A másik lehetőség a sudo
parancs használata. Ezzel a parancsot root felhasználóként — vagy bármilyen más felhasználóként — is végre tudjuk hajtani. Biztonsági szempontból a sudo
sokkal jobb lehetőség, mint a su
, mivel két fő előnye van:
-
egy parancs root felhasználóként történő futtatásához nincs szükség a root felhasználó jelszavára, hanem csak a parancsot futtató felhasználó jelszavára, a biztonsági szabályzatnak megfelelően. Az alapértelmezett biztonsági szabályzat az
/etc/sudoers
és az/etc/sudoers.d/*
állományokban megadottsudoers
. -
a
sudo
lehetővé teszi egyes parancsok futtatását emelt jogosultságokkal, ahelyett, hogy egy teljesen új subshellt kellene indítanunk a root számára, mint asu
esetén.
A sudo
alapvető használata a sudo -u célfelhasználónév parancs
. Ha azonban egy parancsot root felhasználóként szeretnénk futtatni, az -u célfelhasználónév
kapcsolóra nincs szükség:
carol@debian:~$ sudo -u mimi whoami mimi carol@debian:~$ sudo whoami root
Note
|
A |
Az /etc/sudoers
fájl
A sudo
fő konfigurációs fájlja az /etc/sudoers
(van még egy /etc/sudoers.d
mappa is). Ez az a hely, ahol a felhasználók sudo
jogosultságait meghatározzák. Más szóval itt adható meg, hogy ki milyen parancsokat futtathat milyen felhasználóként, milyen gépeken — és más egyéb beállítások is. A használt szintaxis a következő:
carol@debian:~$ sudo less /etc/sudoers (...) # User privilege specification root ALL=(ALL:ALL) ALL # Allow members of group sudo to execute any command %sudo ALL=(ALL:ALL) ALL (...)
A root felhasználó jogosultsági specifikációja az ALL=(ALL:ALL) ALL
. Ez azt jelenti, hogy a root felhasználó (root
) minden hostról bejelentkezhet (ALL
), minden felhasználóként és minden csoportként ((ALL:ALL)
), és minden parancsot futtathat (ALL
). Ugyanez igaz a sudo
csoport tagjaira is — figyeljük meg, hogy a csoportneveket egy százalékjel (%
) jelöli.
Így ahhoz, hogy a carol
felhasználó képes legyen ellenőrizni az apache2
állapotát bármely hostról, bármelyik felhasználó vagy csoport nevében, a következő sort kell hozzáadni a sudoers
fájlhoz:
carol ALL=(ALL:ALL) /usr/bin/systemctl status apache2
Megkímélhetjük carol
-t attól a kellemetlenségtől, hogy meg kelljen adnia a jelszavát a systemctl status apache2
parancs futtatásához. Ehhez így kell módosítanunk a sort:
carol ALL=(ALL:ALL) NOPASSWD: /usr/bin/systemctl status apache2
Tegyük fel, hogy most a 192.168.1.7-re akarjuk korlátozni a hostokat és engedélyezzük carolnak
, hogy mimi
felhasználóként futtassa a systemctl status apache2
-t. A sort a következőképpen módosíthatjuk:
carol 192.168.1.7=(mimi) /usr/bin/systemctl status apache2
Most már ellenőrizhetjük az Apache webszerver állapotát mimi
felhasználóként:
carol@debian:~$ sudo -u mimi systemctl status apache2 ● apache2.service - The Apache HTTP Server Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2020-06-09 13:12:19 CEST; 29min ago (...)
Ha carol
-t előléptetnénk sysadminnak, és minden jogosultságot meg akarnánk adni neki, a legegyszerűbb megoldás az lenne, ha a usermod
és a -G
kapcsolóval felvennénk őt a speciális sudo
csoportba (érdemes lehet használni az -a
kapcsolót is, ami biztosítja, hogy a felhasználót nem távolítjuk el a többi csoportból, amelyhez esetleg tartozik):
root@debian:~# sudo useradd -aG sudo carol
Note
|
A Red Hat disztribúciók családjában a |
Ahelyett, hogy közvetlenül szerkesztenénk az /etc/sudoers
állományt, egyszerűen használjuk a visudo
parancsot root felhasználóként (pl.: visudo
), ami megnyitja az /etc/sudoers
állományt az előre definiált szövegszerkesztővel. Az alapértelmezett szövegszerkesztő megváltoztatásához az /etc/sudoers
állományban az editor
opciót a Defaults
résznél adhatjuk meg. Például, ha a szerkesztőt nano
-ra akarjuk változtatni, akkor a következő sort kell hozzáadni:
Defaults editor=/usr/bin/nano
Note
|
Alternatívaként a |
A felhasználók és csoportok mellett használhatunk aliasokat is az /etc/sudoers
állományban. Az aliasoknak három fő definiálható kategóriája van: host aliasok (Host_Alias
), felhasználó aliasok (User_Alias
) és parancs aliasok (Cmnd_Alias
). Íme egy példa:
# Host alias specification Host_Alias SERVERS = 192.168.1.7, server1, server2 # User alias specification User_Alias REGULAR_USERS = john, mary, alex User_Alias PRIVILEGED_USERS = mimi User_Alias ADMINS = carol, %sudo, PRIVILEGED_USERS, !REGULAR_USERS # Cmnd alias specification Cmnd_Alias SERVICES = /usr/bin/systemctl * # User privilege specification root ALL=(ALL:ALL) ALL ADMINS SERVERS=SERVICES # Allow members of group sudo to execute any command %sudo ALL=(ALL:ALL) ALL
Ezt a sudoers
mintafájlt vizsgálva, elmagyarázzuk egy kicsit részletesebben az aliasok három típusát:
- Host aliasok
-
Ezek közé tartozik a hostnevek, IP-címek, valamint hálózatok és hálózati csoportok vesszővel elválasztott listája (a
+
előtaggal). A hálózati maszkokat is meg lehet adni. ASERVERS
host alias egy IP-címet és két hostnevet tartalmaz::Host_Alias SERVERS = 192.168.1.7, server1, server2
- Felhsználó aliasok
-
Ezek a felhasználók vesszővel elválasztott listáját tartalmazzák, amelyeket felhasználónévként, csoportokként (a
%
előtaggal) és hálózati csoportokként (a+
előtaggal) adunk meg. Bizonyos felhasználókat a!
-el lehet kizárni. AzADMINS
felhasználói alias — például — tartalmazza acarol
felhasználót, asudo
csoport tagjait és aPRIVILEGE_USERS
felhasználói alias azon tagjait, amelyek nem tartoznak aREGULAR_USERS
felhasználói aliasba:User_Alias ADMINS = carol, %sudo, PRIVILEGED_USERS, !REGULAR_USERS
- Parancs aliasok
-
A parancsok és mappák vesszővel elválasztott listáját tartalmazzák. Ha egy mappát adunk meg, akkor az abban a mappában lévő bármely fájl bekerül a listába — az almappákat azonban nem veszi figyelembe. A
SERVICES
parancs alias egyetlen parancsot tartalmaz az összes alparancsával együtt — ahogyan azt a csillag (*
) jelöli:Cmnd_Alias SERVICES = /usr/bin/systemctl *
Az alias specifikációk eredményeképpen a User privilege specification
szakasz ADMINS SERVERS=SERVICES
sora a következőképpen fordítható le: minden felhasználó, aki az ADMINS
-ba tartozik, használhatja a sudo
-t a SERVICES
-ben szereplő bármely parancs futtatására a SERVERS
-ben szereplő bármely szerveren.
Note
|
Van egy negyedik típusú alias is, amelyet az |
Gyakorló feladatok
-
Töltsük ki a következő táblázatot a speciális jogosultságokkal kapcsolatban:
Speciális jogosultság Numerikus ábrázolás Szimbolikus ábrázolás Olyan fájlok keresése, amelyeknél csak ez a jogosultság van megadva SUID
SGID
-
Az olyan fájlok megjelenítése, amelyekben csak az
SUID
vagySGID
bit van beállítva, általában nem túl praktikus. Végezzük el a következő feladatokat, hogy megbizonyosodjunk arról, hogy a keresések eredményesebbek lehetnek:-
Az
/usr/bin
állományban beállítottSUID
(és egyéb jogosultságokkal) rendelkező összes fájl megkeresése: -
Az
/usr/bin
állományban beállítottSGID
(és egyéb jogosultságokkal) rendelkező összes fájl megkeresése: -
Az
/usr/bin
állományban beállítottSUID
vagySGID
jogosultságokkal rendelkező összes fájl megkeresése:
-
-
A
chage
segítségével megváltoztathatjuk a felhasználó jelszavának lejárati idejét. Root felhasználóként töltsük ki az alábbi táblázatot amary
felhasználó megfelelő parancsainak megadásával:Jelentés chage
parancsokLegyen a jelszó 365 napig érvényes!
A felhasználó a következő bejelentkezéskor változtassa meg jelszavát!
Legyen a jelszóváltoztatások közötti minimális napok száma 1!
Jelszó lejárati idő letiltása.
Engedélyezzük, hogy a felhasználó bármikor megváltoztathassa jelszavát!
A figyelmeztető időszakot 7 napra, a fiók lejárati dátumát pedig 2050. augusztus 20-ra állítsuk be!
Írassuk ki a felhasználó aktuális jelszavának lejárati adatait!
-
Töltse ki a következő táblázatot a megfelelő hálózati segédprogrammal:
Művelet Parancs(ok) A
192.168.1.55
host hálózati fájljainak megjelenítése a22
porton azlsof
használatával.Az Apache webszerver alapértelmezett portját elérő folyamatok megjelenítése a
fuser
segítségével.A gépen lévő összes hallgatózó udp socket listázása a
netstat
segítségével.A
192.168.1.55
hoston a80
és443
közötti portok szkennelése aznmap
segítségével. -
Végezzük el a következő resident set size (RSS) és
ulimit
feladatokat egyszerű felhasználóként:-
A maximum RSS soft limitjének megjelenítése:
-
A maximum RSS hard limitjének megjelenítése:
-
Állítsuk be a maximum RSS soft limitjét 5,000 kilobájtra:
-
Állítsuk be a maximum RSS hard limitjét 10,000 kilobájtra:
-
Végül, próbáljuk meg a maximum RSS hard limitjét 15,000 kilobájtra emelni. Meg tudjuk tenni? Miért?
-
-
Tekintsük meg az alábbi
last
parancssort, és válaszoljunk a kérdésekre:carol pts/0 192.168.1.4 Sun May 31 14:16 - 14:22 (00:06)
-
carol
egy távoli hostról csatlakozott? Miért? -
Mennyi ideig tartott
carol
munkamenete? -
carol
egy igazi klasszikus szöveges terminálon keresztül csatlakozott? Miért?
-
-
Tekintsük át a következő részletet az
/etc/sudoers
állományból, és válaszoljunk az alábbi kérdésre!# Host alias specification Host_Alias SERVERS = 192.168.1.7, server1, server2 # User alias specification User_Alias REGULAR_USERS = john, mary, alex User_Alias PRIVILEGED_USERS = mimi User_Alias ADMINS = carol, %sudo, PRIVILEGED_USERS, !REGULAR_USERS # Cmnd alias specification Cmnd_Alias WEB_SERVER_STATUS = /usr/bin/systemctl status apache2 # User privilege specification root ALL=(ALL:ALL) ALL ADMINS SERVERS=WEB_SERVER_STATUS # Allow members of group sudo to execute any command %sudo ALL=(ALL:ALL) ALL
Tudja-e
alex
ellenőrizni az Apache webszerver állapotát bármelyik gépen? Miért?
Gondolkodtató feladatok
-
Az
SUID
ésSGID
mellett van egy harmadik speciális jogosultság is: a sticky bit. Jelenleg leginkább az olyan mappáknál használják, mint a/tmp
, hogy megakadályozzák, hogy a rendszeres felhasználók a sajátjukon kívül más fájlokat is töröljenek vagy áthelyezzenek. Végezzük el a következő feladatokat:-
Állítsuk be a sticky bitet a
~/temporal
mappára: -
Keressünk olyan mappákat, amelyeken a sticky bit (és bármilyen más jogosultság van beállítva) a saját home mappánkban:
-
Vonjuk vissza a sticky bitet a
~/temporal
mappáról:
-
-
Ha egy felhasználó jelszava a
passwd -l username
vagy ausermod -L username
alapján zárolt, hogyan lehet ezt megállapítani az/etc/shadow
fájlból? -
Mi a
usermod
parancs megfelelője achage -E date username
vagy achage --expiredate date username
parancsnak? -
Adjunk meg két különböző
nmap
parancsot a localhost mind a 65535 portjának vizsgálatához:
Összefoglalás
Ebben a leckében megtanultuk, hogyan végezhetünk el számos biztonsági felügyeleti feladatot. A következő témakörökkel foglalkoztunk:
-
A speciális
SUID
ésSGID
engedélyekkel rendelkező fájlok keresése. -
Felhasználók jelszavainak beállítása és módosítása, valamint a jelszó-öregedési információk kezelése.
-
Számos hálózati segédprogram használata a hostok/hálózatok nyitott portjainak felderítésére.
-
A rendszer erőforrásainak korlátozása.
-
A rendszerbe korábban bejelentkezett vagy éppen bejelentkezett felhasználók ellenőrzése.
-
A
sudo
alapvető használata és konfigurálása (az/etc/sudoers
fájlon keresztül).
A leckében használt fájlok és parancsok:
find
-
Fájlok keresése egy mappahierarchiában.
passwd
-
Felhasználói jelszó módosítása.
chmod
-
Fájl üzemmód bitek módosítása.
chage
-
A felhasználói jelszó lejárati információinak módosítása.
lsof
-
Megnyitott fájlok listázása.
fuser
-
Fájlokat vagy socketeket használó folyamatok azonosítása.
netstat
-
Hálózati kapcsolatok kiíratása.
nmap
-
Hálózatfeltáró eszköz és portolvasó.
ulimit
-
Felhasználói limitek lekérdezése és beállítása.
/etc/security/limits.conf
-
Konfigurációs fájl a felhasználókra vonatkozó korlátozások alkalmazásához.
last
-
Az utoljára bejelentkezett felhasználók listájának kiíratása.
lastb
-
A rossz bejelentkezési kísérletek listájának kiíratása.
/var/log/wtmp
-
A felhasználói bejelentkezések adatbázisa.
who
-
Megmutatja, hogy ki van bejelentkezve.
w
-
Megmutatja, hogy ki van bejelentkezve és mit csinál.
su
-
Felhasználóváltás vagy szuperfelhasználóvá válás.
sudo
-
Egy parancs végrehajtása más felhasználóként (beleértve a szuperfelhasználót is).
/etc/sudoers
-
A
sudo
biztonsági szabályzat alapértelmezett konfigurációs fájlja.
Válaszok a gyakorló feladatokra
-
Töltsük ki a következő táblázatot a speciális jogosultságokkal kapcsolatban:
Speciális jogosultság Numerikus ábrázolás Szimbolikus ábrázolás Olyan fájlok keresése, amelyeknél csak ez a jogosultság van megadva SUID
4000
s
,S
find -perm 4000
,find -perm u+s
SGID
2000
s
,S
find -perm 2000
,find -perm g+s
-
Az olyan fájlok megjelenítése, amelyekben csak az
SUID
vagySGID
bit van beállítva, általában nem túl praktikus. Végezzük el a következő feladatokat, hogy megbizonyosodjunk arról, hogy a keresések eredményesebbek lehetnek:-
Az
/usr/bin
állományban beállítottSUID
(és egyéb jogosultságokkal) rendelkező összes fájl megkeresése:find /usr/bin -perm -4000
vagyfind /usr/bin -perm -u+s
-
Az
/usr/bin
állományban beállítottSGID
(és egyéb jogosultságokkal) rendelkező összes fájl megkeresése:find /usr/bin -perm -2000
vagyfind /usr/bin -perm -g+s
-
Az
/usr/bin
állományban beállítottSUID
vagySGID
jogosultságokkal rendelkező összes fájl megkeresése:find /usr/bin -perm /6000
-
A chage
segítségével megváltoztathatjuk a felhasználó jelszavának lejárati idejét. Root felhasználóként töltsük ki az alábbi táblázatot a mary
felhasználó megfelelő parancsainak megadásával:
+
Jelentés | chage parancsok |
---|---|
Legyen a jelszó 365 napig érvényes! |
|
A felhasználó a következő bejelentkezéskor változtassa meg jelszavát! |
|
Legyen a jelszóváltoztatások közötti minimális napok száma 1! |
|
Jelszó lejárati idő letiltása. |
|
Engedélyezzük, hogy a felhasználó bármikor megváltoztathassa jelszavát! |
|
A figyelmeztető időszakot 7 napra, a fiók lejárati dátumát pedig 2050. augusztus 20-ra állítsuk be! |
|
Írassuk ki a felhasználó aktuális jelszavának lejárati adatait! |
|
-
Töltse ki a következő táblázatot a megfelelő hálózati segédprogrammal:
Művelet Parancs(ok) A
192.168.1.55
host hálózati fájljainak megjelenítése a22
porton azlsof
használatával.lsof -i@192.168.1.55:22
Az Apache webszerver alapértelmezett portját elérő folyamatok megjelenítése a
fuser
segítségével.fuser -vn tcp 80
,fuser --verbose --namespace tcp 80
A gépen lévő összes hallgatózó udp socket listázása a
netstat
segítségével.netstat -lu
,netstat --listening --udp
A
192.168.1.55
hoston a80
és443
közötti portok szkennelése aznmap
segítségével.nmap -p 80-443 192.168.1.55
-
Végezzük el a következő resident set size (RSS) és
ulimit
feladatokat egyszerű felhasználóként:-
A maximum RSS soft limitjének megjelenítése:
ulimit -m
,ulimit -Sm
-
A maximum RSS hard limitjének megjelenítése:
ulimit -Hm
-
Állítsuk be a maximum RSS soft limitjét 5,000 kilobájtra:
ulimit -Sm 5000
-
Állítsuk be a maximum RSS hard limitjét 10,000 kilobájtra:
ulimit -Hm 10000
-
Végül, próbáljuk meg a maximum RSS hard limitjét 15,000 kilobájtra emelni. Meg tudjuk tenni? Miért?
Nem. Ha egyszer beállításra került, az átlagos felhasználók nem növelhetik a hard limiteket.
-
-
Tekintsük meg az alábbi
last
parancssort, és válaszoljunk a kérdésekre:carol pts/0 192.168.1.4 Sun May 31 14:16 - 14:22 (00:06)
-
carol
egy távoli hostról csatlakozott? Miért?Igen, a távoli host IP-címe a harmadik oszlopban található.
-
Mennyi ideig tartott
carol
munkamenete?Hat percig (az utolsó oszlopban látható).
-
carol
egy igazi klasszikus szöveges terminálon keresztül csatlakozott? Miért?Nem, a
pts/0
a második oszlopban azt jelzi, hogy a kapcsolat egy grafikus terminál emulátoron keresztül jött létre (más néven Pseudo Terminal Slave).
-
-
Tekintsük át a következő részletet az
/etc/sudoers
állományból, és válaszoljunk az alábbi kérdésre!# Host alias specification Host_Alias SERVERS = 192.168.1.7, server1, server2 # User alias specification User_Alias REGULAR_USERS = john, mary, alex User_Alias PRIVILEGED_USERS = mimi User_Alias ADMINS = carol, %sudo, PRIVILEGED_USERS, !REGULAR_USERS # Cmnd alias specification Cmnd_Alias WEB_SERVER_STATUS = /usr/bin/systemctl status apache2 # User privilege specification root ALL=(ALL:ALL) ALL ADMINS SERVERS=WEB_SERVER_STATUS # Allow members of group sudo to execute any command %sudo ALL=(ALL:ALL) ALL
Tudja-e
alex
ellenőrizni az Apache webszerver állapotát bármelyik gépen? Miért?Nem, mivel a
REGULAR_USERS
tagja és annak a csoportnak a felhasználói ki vannak zárva azADMINS
-ból, akik az egyetlen felhasználók (carol
, asudo
csoport tagjai és aroot
kivételével), akik futtathatják asystemctl status apache2`t a `SERVERS
-en.
Válaszok a gondolkodtató feladatokra
-
Az
SUID
ésSGID
mellett van egy harmadik speciális jogosultság is: a sticky bit. Jelenleg leginkább az olyan mappáknál használják, mint a/tmp
, hogy megakadályozzák, hogy a rendszeres felhasználók a sajátjukon kívül más fájlokat is töröljenek vagy áthelyezzenek. Végezzük el a következő feladatokat:-
Állítsuk be a sticky bitet a
~/temporal
mappára:chmod +t temporal
,chmod 1755 temporal
-
Keressünk olyan mappákat, amelyeken a sticky bit (és bármilyen más jogosultság van beállítva) a saját home mappánkban:
find ~ -perm -1000
,find ~ -perm /1000
-
Vonjuk vissza a sticky bitet a
~/temporal
mappáról:chmod -t temporal
,chmod 0755 temporal
-
-
Ha egy felhasználó jelszava a
passwd -l username
vagy ausermod -L username
alapján zárolt, hogyan lehet ezt megállapítani az/etc/shadow
fájlból?A második mezőben egy felkiáltójel jelenik meg, közvetlenül az érintett felhasználó bejelentkezési neve után (pl.:
mary:!$6$gOg9xJgv…
). -
Mi a
usermod
parancs megfelelője achage -E date username
vagy achage --expiredate date username
parancsnak?usermod -e date username
,usermod --expiredate date username
-
Adjunk meg két különböző
nmap
parancsot a localhost mind a 65535 portjának vizsgálatához:nmap -p 1-65535 localhost
ésnmap -p- localhost