Modul 3 · 3.2
sudo i minimalna prava
Modul 3: Korisnici, prava i sudo · Vrijeme čitanja: 11 minuta
Cilj učenja: Nakon ove lekcije moći ćete raditi kao običan korisnik sa sudo, sigurno dodati administratora, mijenjati postavke sudo tako da sami sebi ne zaključate pristup te objasniti zašto minimalna prava štite Vaš poslužitelj.
Ključni pojmovi: sudo, grupa sudo, grupa wheel, /etc/sudoers, /etc/sudoers.d, visudo, NOPASSWD, sudo -l, zaključavanje roota, zapisnik sudo, minimalna prava (least privilege), servisni korisnik
Zašto ne raditi jednostavno kao root?
Nakon instalacije često se prijavljujete kao root. To je praktično: sve je dopušteno. No upravo je to problem:
- Dovoljna je jedna tipfelerska pogreška.
rm -rf / home/anna/oud(obratite pozornost na razmak nakon prve kose crte) kao root briše cijeli Vaš poslužitelj. Kao običan korisnik dobit ćete poruku o pogrešci. - Sve se izvršava kao root. Skripta koju zalijepite s interneta, program koji testirate: sve dobiva puna prava.
- Nema traga. Ako tri osobe rade kao root, naknadno nitko ne zna tko je što napravio.
- Root je ime koje svaki napadač pokušava. Prijavu kao root najbolje je potpuno isključiti (lekcija 2.2), ali to možete tek kada imate drugi put do administratorskih prava.
Taj drugi put je sudo: prijavljujete se kao Vi sami i samo ispred naredbe kojoj trebaju administratorska prava stavljate sudo.
anna@web1:~$ apt update
E: Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied)
anna@web1:~$ sudo apt update
[sudo] password for anna:
Hit:1 http://deb.debian.org/debian trixie InRelease
...(Ubuntu od verzije 25.10 standardno koristi sudo-rs, novu implementaciju programa sudo. Za sve u ovoj lekciji radi jednako.)
sudo traži Vašu lozinku, a ne lozinku korisnika root. Nakon toga je standardno pamti četvrt sata, tako da je ne morate ponovno unositi kod svake naredbe. Svaka naredba koju izvršite sa sudo upisuje se u zapisnik.
Izrada administratora
Na sustavima Debian i Ubuntu svatko u grupi sudo smije sve putem sudo. To je zapisano u /etc/sudoers:
%sudo ALL=(ALL:ALL) ALLČitajte to ovako: članovi grupe sudo (%) smiju na svim računalima (ALL) kao bilo koji korisnik i grupa ((ALL:ALL)) izvršiti bilo koju naredbu (ALL).
Dodavanje administratora stoga se odvija u dva koraka, kao root:
root@web1:~# adduser anna
root@web1:~# adduser anna sudoZatim stavite Annin javni ključ u /home/anna/.ssh/authorized_keys s ispravnim vlasnikom i pravima:
root@web1:~# mkdir -p /home/anna/.ssh
root@web1:~# cp /root/.ssh/authorized_keys /home/anna/.ssh/
root@web1:~# chown -R anna:anna /home/anna/.ssh
root@web1:~# chmod 700 /home/anna/.ssh
root@web1:~# chmod 600 /home/anna/.ssh/authorized_keysNe zaboravite chown: ako ju je kopirao root, datoteka pripada rootu i tada se Anna ne može prijaviti svojim ključem.
Sada, dok Vaša root sesija ostaje otvorena, testirajte u drugom prozoru:
anna@laptop:~$ ssh anna@192.0.2.10
anna@web1:~$ sudo -l
[sudo] password for anna:
User anna may run the following commands on web1:
(ALL : ALL) ALL
anna@web1:~$ sudo whoami
rootTek kada to radi, u SSH postavkama postavite PermitRootLogin no (lekcija 2.2). Od tada se uvijek prijavljujete kao Anna.
Jedno valja zapamtiti: Anni sada za sudo treba lozinka. Spremite je u svoj upravitelj lozinki. Prijava ide ključem, sudo lozinkom: dvije različite stvari koje provalnik mora imati obje.
Mijenjanje postavki sudo: uvijek s visudo
Pogreška u /etc/sudoers može značiti da sudo uopće više ne radi. Ako se ni root ne može prijaviti, zapeli ste. Zato postavke sudo nikada ne uređujete običnim uređivačem, nego s visudo. On otvara privremenu kopiju i provjerava sadržaj prije spremanja:
root@web1:~# visudo -f /etc/sudoers.d/backupKao i kod SSH, radije koristite vlastitu datoteku u /etc/sudoers.d/ nego glavnu datoteku. Obratite pozornost na dva pravila te mape:
- Datoteke čiji naziv sadrži točku ili završava na
~preskaču se.backup.confstoga ne radi, abackupradi. To je zamišljeno kako bi se zanemarile kopije koje stvaraju uređivači, ali mnoge iznenadi. - Datoteka mora pripadati rootu i ne smije biti zapisiva za druge (uobičajeno je 440; visudo to sređuje).
Želite li provjeriti postojeću datoteku bez uređivanja: visudo -c provjerava sve.
NOPASSWD: praktično, ali znajte što radite
Uz NOPASSWD sudo više ne traži lozinku:
anna ALL=(ALL:ALL) NOPASSWD: ALLNeke VPS slike to postavljaju za standardnog korisnika, tako da nakon prijave ključem odmah imate administratorska prava. Pomoću sudo -l provjerite što vrijedi kod Vas. Posljedica: tko ima Annin ključ, odmah je root. Više nema druge brave. Za osobni poslužitelj to možete odabrati, ali učinite to svjesno.
Puno je bolje NOPASSWD samo za jednu određenu naredbu, primjerice za skriptu za sigurnosno kopiranje koja se mora moći automatski pokretati:
backup ALL=(root) NOPASSWD: /usr/local/bin/maak-backupKorisnik backup tada smije pokrenuti upravo tu jednu skriptu kao root, bez lozinke, i ništa drugo. Dvije zamke:
- Uvijek koristite punu putanju. Uz samo
maak-backupnetko može staviti vlastiti program tog imena na početak svoje putanje. - Sama skripta ne smije biti zapisiva za tog korisnika. Inače je on može izmijeniti i zatim pokretati proizvoljne naredbe kao root. Isto vrijedi za naredbe koje same mogu otvoriti ljusku, poput uređivača (
vim,nano) ililess: tko ih smije pokrenuti putem sudo, može iz programa otvoriti root ljusku. Takve naredbe nikada ne dopuštajte zasebno putem sudo.
Što se bilježi
Svaki put kada netko koristi sudo, u journal se upisuje redak (a na sustavima s rsyslogom i u /var/log/auth.log):
anna@web1:~$ sudo journalctl _COMM=sudo --since today
Nov 09 10:31:02 web1 sudo[2214]: anna : TTY=pts/0 ; PWD=/home/anna ; USER=root ; COMMAND=/usr/bin/apt updateVidite tko, gdje, kao tko i koju naredbu. To je jedan od razloga da više osoba ne radi kao root. Neuspjeli pokušaji sudo ("incorrect password attempts") s računa koji nije Vaš znak su za uzbunu.
Minimalna prava u širem smislu
sudo je jedna primjena općeg načela: minimalnih prava (least privilege). Svaki korisnik i svaka usluga dobiva točno ona prava koja su potrebna, i ništa više. Na poslužitelju to, među ostalim, znači:
- radite kao običan korisnik i sudo koristite samo kada je potrebno;
- svaka usluga radi pod vlastitim korisnikom bez ljuske (lekcija 3.1), a ne kao root;
- web-aplikacija dobiva korisnika baze podataka koji smije koristiti samo svoju bazu, a ne administratora poslužitelja baze podataka;
- skripta za sigurnosno kopiranje smije samo onu jednu naredbu koja joj treba (NOPASSWD s punom putanjom);
- kolega koji samo ažurira web-stranicu dobiva pravo pisanja na
/var/www/example.computem grupe, a ne sudo.
Ideja: ako nešto pođe po zlu (propust u dodatku, ukradeni ključ), šteta ostaje ograničena na tog jednog korisnika ili uslugu. U načelima CIS-a i lekciji o hardeningu (10.1) to se stalno ponavlja.
Na AlmaLinuxu i Rocky Linuxu
Ondje se administratorska grupa zove wheel umjesto sudo: usermod -aG wheel anna. Redak u /etc/sudoers glasi %wheel ALL=(ALL) ALL. visudo i /etc/sudoers.d rade jednako. Poruke sudo ondje se nalaze i u /var/log/secure.
Sažetak
- Radite kao običan korisnik i za administraciju koristite sudo; sudo traži Vašu vlastitu lozinku i bilježi svaku naredbu.
- Izrada administratora:
adduser anna,adduser anna sudo(wheel na sustavima sličnim RHEL-u), ključ s ispravnim vlasnikom i pravima, test u drugom prozoru, tek onda isključite root prijavu. - Pravila sudo uređujte samo s
visudo, po mogućnosti u vlastitoj datoteci u/etc/sudoers.d/bez točke u nazivu. - NOPASSWD za sve uklanja jednu bravu; radije ga koristite samo za jednu naredbu s punom putanjom koju korisnik ne može mijenjati.
- Minimalna prava: svaki korisnik i usluga dobiva točno ono što je potrebno, kako bi pogreška ili propust ostali mali.
Kviz
Zadatak
Zadatak O3.2: Administrator sa sudo ovlastima. Na svom poslužitelju izradite običnog administratora (na primjer anna), ispravno postavite svoj ključ, u drugom prozoru testirajte prijavu i sudo -l, a zatim isključite root prijavu putem SSH (PermitRootLogin no). Označite korake, zalijepite izlaz naredbe id (samo ime i grupe) i odgovorite na pitanja: koji redak Vašem administratoru daje prava, postoji li negdje NOPASSWD i kako ćete ući ako zaboravite lozinku?
Zadatak O3.2: Administrator sa sudo ovlastima
Ovaj zadatak rješavate sami; nitko ga ne provjerava. Označite što ste napravili i označite zadatak kao završen.
%sudo ALL=(ALL:ALL) ALL u /etc/sudoers (RHEL: %wheel). NOPASSWD samo svjesno i po mogućnosti ograničeno na jednu naredbu. Kod zaboravljene lozinke: putem konzole Vašeg pružatelja usluga, nova root lozinka putem upravljačke ploče ili okruženja za oporavak, zatim passwd <gebruiker>.
Vaše kvačice i bilješke ostaju samo u ovom pregledniku; ne šaljemo ih nikamo. Ako ste prijavljeni, u Moji tečajevi čuvamo samo podatak da ste zadatak završili.
Dodatno štivo
Koraci u ovim člancima vrijede za VPS poslužitelje tvrtke WebOké; kod drugih pružatelja usluga postupak je sličan.
- Zaštita VPS-a: prvih pet minuta
- Nemate više pristup VPS-u: što sada?
- DirectAdmin priručnik 12.2: Korisnici baze podataka, prava i lozinke
- Ubuntu Server: User management: https://ubuntu.com/server/docs/how-to/security/user-management/
- Debian priručnik za sudoers: https://manpages.debian.org/trixie/sudo/sudoers.5.en.html
