Modul 3 · 3.1
Korisnici, grupe i prava pristupa datotekama
Modul 3: Korisnici, prava i sudo · Vrijeme čitanja: 12 minuta
Cilj učenja: Nakon ove lekcije moći ćete stvarati i pregledavati korisnike i grupe, čitati prava pristupa datoteke ili mape u ls -l te ih ispravno postaviti s chmod i chown, a da pritom ne otvorite sve svima.
Ključni pojmovi: root (UID 0), obični korisnik, sistemski korisnik, /etc/passwd, /etc/shadow, grupa, adduser, id, rwx, vlasnik, grupa, ostali, oktalni zapis (644, 755, 600), chmod, chown, umask, setuid, 777
Svatko je broj
Linux je od samog početka izgrađen za više korisnika na jednom računalu. Svaki proces koji se izvodi radi u ime nekog korisnika, a svaka datoteka ima vlasnika. Za sustav je korisnik prije svega broj, UID:
- root ima UID 0. Root smije sve: čitati i mijenjati svaku datoteku, zaustaviti svaku uslugu, stvoriti svakog korisnika. Nema pitanja "jeste li sigurni".
- Obični korisnici, poput
anna, na Debianu i Ubuntuu dobivaju UID od 1000 naviše. Smiju pisati u vlastitu kućnu mapu i malo što drugo. - Sistemski korisnici imaju nizak broj i obično nemaju lozinku ni ljusku (shell). Usluge rade pod takvim korisnikom: nginx pod
www-data, PostgreSQL podpostgres. Ako netko provali u takvu uslugu, napadač ima samo prava tog korisnika, a ne prava korisnika root.
Tko ste, vidite naredbom id:
anna@web1:~$ id
uid=1000(anna) gid=1000(anna) groups=1000(anna),27(sudo),100(users)Anna ima UID 1000, vlastitu grupu anna i nalazi se i u grupama sudo i users.
Gdje se nalaze korisnici
Popis korisnika nalazi se u /etc/passwd, jedan redak po korisniku:
anna@web1:~$ grep -E '^(root|www-data|anna):' /etc/passwd
root:x:0:0:root:/root:/bin/bash
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
anna:x:1000:1000:Anna,,,:/home/anna:/bin/bashPolja, odvojena dvotočkama: ime, x (lozinka je spremljena drugdje), UID, glavna grupa, opis, kućna mapa, ljuska. Kod www-data kao ljuska stoji /usr/sbin/nologin: prijava nije moguća.
Same lozinke spremljene su, šifrirane (hashirane), u /etc/shadow. Tu datoteku može čitati samo root. Znak ! ili * na početku polja lozinke znači: prijava lozinkom nije moguća. Tako je root na Ubuntuu prema zadanim postavkama zaključan, a na Debianu ako pri instalaciji niste unijeli lozinku za root.
Stvaranje korisnika i grupa
Na Debianu i Ubuntuu koristite prijateljski alat adduser:
root@web1:~# adduser anna
info: Adding user `anna' ...
info: Adding new group `anna' (1000) ...
info: Adding new user `anna' (1000) with group `anna (1000)' ...
info: Creating home directory `/home/anna' ...
info: Copying files from `/etc/skel' ...
New password:
Retype new password:
...adduser stvara korisnika, vlastitu grupu istog imena i kućnu mapu te traži lozinku. Postoji i alat niže razine useradd (na AlmaLinuxu i Rocky Linuxu to je uobičajena naredba), ali bez opcija čini manje: ne postavlja lozinku, a na nekim sustavima ne stvara ni kućnu mapu.
Grupa je način da prava dodijelite većem broju korisnika odjednom. Dodavanje korisnika u grupu:
root@web1:~# adduser anna www-data
root@web1:~# usermod -aG www-data anna # isto, radi svugdjeObratite pozornost na -a uz usermod: bez -a sve dodatne grupe korisnika zamjenjujete samo ovom jednom. Nova grupa vrijedi tek nakon ponovne prijave.
Zatvaranje računa bez brisanja (na primjer računa bivšeg kolege):
root@web1:~# usermod -L -e 1 ivan-L zaključava lozinku, -e 1 postavlja istek računa. Pazite: zaključana lozinka ne zaustavlja uvijek SSH ključ. Zato uklonite i ključeve u /home/ivan/.ssh/authorized_keys (lekcija 2.3); račun kojemu je istekla valjanost (-e 1) sshd ipak odbija.
Čitanje prava pristupa
anna@web1:~$ ls -l /var/www/example.com
total 12
-rw-r--r-- 1 anna www-data 1520 Nov 9 10:12 index.html
-rw-r----- 1 anna www-data 412 Nov 9 10:14 config.php
drwxr-xr-x 2 anna www-data 4096 Nov 9 10:15 images
drwxrwxr-x 2 www-data www-data 4096 Nov 9 10:20 uploadsPrvi blok od deset znakova ključ je svega:
- Znak 1: vrsta.
-je obična datoteka,dmapa (direktorij),lprečac (simbolička poveznica, symlink). - Znakovi 2 do 4: što smije vlasnik.
- Znakovi 5 do 7: što smije grupa.
- Znakovi 8 do 10: što smiju ostali (svi drugi).
Zatim slijede broj poveznica, vlasnik, grupa, veličina i datum.
Kod datoteke slova znače:
| Slovo | Značenje kod datoteke |
|---|---|
r | čitanje |
w | mijenjanje |
x | pokretanje kao programa ili skripte |
A kod mape nešto drugačije:
| Slovo | Značenje kod mape |
|---|---|
r | dohvaćanje imena datoteka u mapi |
w | stvaranje, preimenovanje i brisanje datoteka u mapi |
x | ulazak u mapu i otvaranje datoteka u njoj |
Ovo posljednje iznenadi mnoge. Bez x na mapi ne možete doći do datoteka u njoj, čak i ako su same datoteke čitljive. A tko ima w na mapi, može u njoj brisati datoteke, čak i ako pripadaju nekom drugom.
U primjeru: index.html smiju čitati svi; config.php (s lozinkom baze podataka) Anna smije čitati i mijenjati, grupa www-data (dakle web-poslužitelj) samo čitati, a ostali ništa. U uploads web-poslužitelj smije pisati jer se ondje spremaju datoteke koje posjetitelji učitavaju.
Prava kao broj
Prava se često zapisuju kao tri znamenke, oktalni broj. Svako slovo ima vrijednost: r = 4, w = 2, x = 1. Zbrojite ih za svaku skupinu:
| Prava | Broj | Upotreba |
|---|---|---|
rw-r--r-- | 644 | obična datoteka koju svi smiju čitati |
rw-r----- | 640 | datoteka za vlasnika i grupu, poput konfiguracije s lozinkom |
rw------- | 600 | tajna datoteka, poput authorized_keys ili privatnog ključa |
rwxr-xr-x | 755 | mapa ili program koji svi smiju koristiti |
rwx------ | 700 | privatna mapa, poput ~/.ssh |
Mijenjanje prava: chmod i chown
anna@web1:~$ chmod 640 /var/www/example.com/config.php
anna@web1:~$ chmod g+w /var/www/example.com/uploads
root@web1:~# chown anna:www-data /var/www/example.com/config.phpchmod mijenja prava, brojem ili slovima (u, g, o za vlasnika, grupu i ostale; + ili - i slovo). chown eigenaar:groep mijenja vlasnika i grupu; to smije samo root. S -R obje naredbe djeluju na cijelu mapu i tu često nastaju problemi: chmod -R 644 na mapi čini sve podmape neupotrebljivima jer mape trebaju x. Za cijelo stablo radije koristite find:
root@web1:~# find /var/www/example.com -type d -exec chmod 755 {} +
root@web1:~# find /var/www/example.com -type f -exec chmod 644 {} +Nikada 777
"Ne radi, pa sam stavio 777." 777 znači: svatko na poslužitelju smije ovo čitati, mijenjati i pokretati. Ako ikada samo jedna usluga ili jedna web-stranica na Vašem poslužitelju bude kompromitirana, napadač može pisati svugdje gdje je postavljeno 777, uključujući Vaše PHP datoteke. Pravi je problem gotovo uvijek vlasnik ili grupa: preko grupe dodijelite web-poslužitelju točno ono pravo koje mu treba, i to samo na mapi na kojoj mu treba.
Zadana prava i posebni bitovi
Nove datoteke dobivaju prava preko umask. S uobičajenom vrijednošću umask 022 nove datoteke dobivaju 644, a nove mape 755. Svoj umask vidite naredbom umask.
Ponekad umjesto x vidite s, kao kod /usr/bin/passwd (-rwsr-xr-x). To je bit setuid: program se izvodi s pravima vlasnika (root), čak i kada ga pokrene obični korisnik. To je potrebno za nekoliko sistemskih programa, ali ga nikada sami ne postavljajte na skriptu. Neočekivana setuid datoteka poznat je znak provale; s find / -perm -4000 -type f 2>/dev/null vidite sve takve datoteke.
Na AlmaLinuxu i Rocky Linuxu
adduser je ondje drugo ime za useradd; koristite useradd -m anna i zatim passwd anna. Grupe dodajete s usermod -aG. SELinux dodaje još jedan sloj uz prava iz ove lekcije: datoteka s ispravnim pravima ipak može biti odbijena ako na njoj stoji pogrešna SELinux oznaka (ls -Z je prikazuje).
Sažetak
- Svaki korisnik ima UID; root (0) smije sve, a usluge rade pod vlastitim sistemskim korisnicima bez ljuske.
- Korisnici su zapisani u
/etc/passwd, a hashevi lozinki u/etc/shadow. Korisnike stvarate sadduser, a grupe dodajete susermod -aG. ls -lprikazuje vrstu, prava vlasnika, grupe i ostalih, a zatim vlasnika i grupu. Kod mapexznači ulazak, awstvaranje i brisanje datoteka.- Uobičajeni brojevi: 644 i 755 za javno, 640 za konfiguraciju s tajnama, 600 i 700 za privatno. Nikada 777.
- Za postavljanje prava na cijelo stablo koristite
find; pazite na setuid datoteke.
Kviz
Zadatak
Zadatak Z3.1: Čitanje prava pristupa. Otvorite primjer datoteke rechten-1.txt: ispis naredbe id za tri korisnika i naredbe ls -l u web-mapi. Za svako pitanje odgovorite tko što smije (na primjer: "može li web-poslužitelj mijenjati config.php?", "koja datoteka ima preširoka prava?", "koji broj odgovara .env?"). Program uspoređuje Vaše odgovore s fiksnim ključem i za svako pitanje objašnjava zašto.
Dodatno štivo
Koraci u ovim člancima vrijede za pakete web-hostinga i VPS-ove tvrtke WebOké; kod drugih pružatelja usluga postupak je sličan.
- Zabranjeno (403): Nemate dopuštenje za pristup / na ovom poslužitelju
- Prijava na Vaš VPS putem SSH-a (i izrada SSH ključa)
- Besplatan WordPress tečaj 7.4: Učvršćivanje web-stranice: dozvole, zaglavlja i sigurnosni dodaci
- Debianov priručnik za adduser: https://manpages.debian.org/trixie/adduser/adduser.8.en.html
- Debianov priručnik za chmod: https://manpages.debian.org/trixie/coreutils/chmod.1.en.html
- Čitanje i ispravno postavljanje dozvola za datoteke na Vašem VPS-u
