Pregled prava pristupa — kako se čita rwxr-xr--
Deset znakova na početku svakog reda u ls -l govore ko šta
sme sa tim fajlom. Kad ih naučiš da čitaš, prestaju da budu šifra — a većina
poruka Permission denied dobija očigledan uzrok.
Ova stranica je o čitanju dozvola. Menjanje je na stranicama chmod i Podešavanje prava pristupa.
Deset znakova
$ ls -l izvestaj.txt -rw-r--r-- 1 alen urednici 284 Aug 22 10:15 izvestaj.txt
Prvi deo se čita kao 1 + 3 + 3 + 3:
- rw- r-- r-- │ │ │ │ │ │ │ └── ostali │ │ └─────── grupa │ └──────────── vlasnik └──────────────── tip fajla
Prvi znak: tip
- |
običan fajl |
d |
direktorijum |
l |
simbolički link |
b / c |
blokovski / znakovni uređaj (u /dev) |
s / p |
soket / imenovana cev |
Tri trojke: ko
Redom: vlasnik fajla, grupa kojoj fajl pripada, i ostali — svi koji nisu ni jedno ni drugo.
U primeru iznad vlasnik je alen, grupa
urednici.
Tri slova: šta
r |
Fajl: čitanje sadržaja. Direktorijum: listanje imena unutra. |
w |
Fajl: izmena sadržaja. Direktorijum: pravljenje, brisanje i preimenovanje fajlova u njemu. |
x |
Fajl: pokretanje. Direktorijum: ulazak i pristup fajlovima unutra. |
- |
nema tog prava |
Desna kolona je najvažnija stvar na stranici: ista slova znače različite stvari za fajl i za direktorijum. Na tome se lome skoro sve zabune.
Kako sistem odlučuje
Provera ide redom i staje na prvom poklapanju:
- Jesi li vlasnik? Primenjuje se prva trojka. Kraj.
- Jesi li u grupi fajla? Primenjuje se druga trojka. Kraj.
- Inače važi treća trojka.
Reč kraj je bitna, jer daje neočekivan rezultat:
$ ls -l tajna.txt ----rw-rw- 1 alen urednici 128 Aug 22 11:02 tajna.txt $ whoami alen $ cat tajna.txt cat: tajna.txt: Permission denied
Alen je vlasnik, njegova trojka je ---, i tu se provera
završava. To što grupa i ostali imaju rw ne pomaže — ostale
trojke se ne gledaju.
Ovo je jedini slučaj u kome vlasnik ima manje prava od stranca. Retko se dešava namerno, ali objašnjava naizgled nemoguću poruku.
Root ne prolazi kroz ovu proveru
$ sudo cat tajna.txt prvi red
Za UID 0 kernel dozvole ne proverava. Detaljnije u lekciji Kontrola privilegija.
Brojčani zapis
Ista informacija, kraće. Svakom slovu pripada broj:
r = 4 w = 2 x = 1
Trojka je njihov zbir:
7 |
rwx — sve |
6 |
rw- — čitanje i pisanje |
5 |
r-x — čitanje i izvršavanje |
4 |
r-- — samo čitanje |
0 |
--- — ništa |
Pa je rw-r--r-- zapravo 644, a
rwxr-xr-x je 755.
Ne moraš računati napamet:
$ stat -c "%a %A %U %G %n" izvestaj.txt 644 -rw-r--r-- alen urednici izvestaj.txt $ stat -c "%a %A" /var/www 775 drwxrwxr-x
Ovo je najbrži način da vidiš oba oblika odjednom.
Vrednosti koje ćeš sretati
| 644 | Običan fajl. Vlasnik menja, ostali čitaju. |
| 755 | Skripta ili direktorijum. Svi mogu koristiti, samo vlasnik menja. |
| 600 | Privatno. SSH ključevi, fajlovi sa lozinkama. |
| 664 / 775 | Timski rad — grupa sme da menja. |
| 777 | Svi sve. Skoro nikad nije pravo rešenje. |
Direktorijumi: gde se najviše greši
Ponovimo, jer je ovo suština:
r— smeš da vidiš imena fajlovax— smeš da uđeš i pristupiš fajlu unutraw— smeš da pravíš i brišeš fajlove
r bez x — vidiš imena, ali ništa više
$ ls -ld podaci dr--r--r-- 2 alen alen 4096 Aug 22 12:00 podaci $ ls podaci ls: cannot access 'podaci/izvestaj.txt': Permission denied izvestaj.txt $ cd podaci bash: cd: podaci: Permission denied
Ime se vidi, sve ostalo ne. Direktorijum bez x je praktično
beskoristan — zato dozvole nad direktorijumima gotovo uvek imaju
x tamo gde imaju r.
x bez r — prolaziš, ali ne listaš
$ ls -ld /home/marko drwx--x--x 5 marko marko 4096 Aug 22 12:10 /home/marko $ ls /home/marko ls: cannot open directory '/home/marko': Permission denied $ cat /home/marko/javno/podaci.txt sadrzaj fajla
Ne možeš videti šta postoji, ali ako znaš tačno ime, dolaziš do fajla. Ovo je legitimna postavka — tako web server pristupa jednom direktorijumu, a ne vidi ostatak.
Za brisanje je bitan direktorijum, ne fajl
$ ls -l vazno.txt -r--r--r-- 1 root root 1024 Aug 22 12:20 vazno.txt $ ls -ld . drwxrwxrwx 2 alen alen 4096 Aug 22 12:20 . $ rm vazno.txt rm: remove write-protected regular file 'vazno.txt'? y $ ls vazno.txt ls: cannot access 'vazno.txt': No such file or directory
Fajl je bio rootov i samo za čitanje — a obrisan je. Razlog: brisanje menja
tabelu imena u direktorijumu, ne sam fajl. Objašnjenje je u lekciji
Inode-ovi i linkovi, a
zaštita od ovoga je sticky bit — otud t na
/tmp.
Cela putanja mora biti prohodna
$ ls -l /podaci/tim/izvestaj.txt -rw-rw-r-- 1 alen urednici 512 Aug 22 12:30 /podaci/tim/izvestaj.txt $ cat /podaci/tim/izvestaj.txt cat: /podaci/tim/izvestaj.txt: Permission denied
Dozvole na fajlu su u redu. Problem je iznad:
$ namei -l /podaci/tim/izvestaj.txt f: /podaci/tim/izvestaj.txt drwxr-xr-x root root / drwxr-x--- root arhiva podaci drwxrwxr-x alen urednici tim -rw-rw-r-- alen urednici izvestaj.txt
Direktorijum podaci nema x za ostale, a ti nisi u
grupi arhiva. Put je zatvoren na drugom nivou.
namei -l je najkorisnija komanda na ovoj stranici. Kad
god dobiješ Permission denied a dozvole na fajlu izgledaju
ispravno, pokreni je — pokazuje ceo lanac odjednom.
Provera bez pogađanja
$ test -r fajl.txt && echo "mogu da citam" $ test -w fajl.txt && echo "mogu da pisem" $ test -x skripta.sh && echo "mogu da pokrenem"
Za tuđa prava postoji sudo -u:
$ sudo -u www-data test -r /var/www/sajt/index.html && echo "moze" $ sudo -u www-data ls /var/www/sajt
Ovo je pravi način da proveriš zašto web server ne vidi fajl — umesto
zaključivanja iz ispisa ls -l.
A da vidiš u kojim si grupama:
$ id uid=1000(alen) gid=1000(alen) groups=1000(alen),27(sudo),1002(urednici)
Detaljnije na stranici id.
Sveže dodata grupa ne važi odmah
$ sudo usermod -aG urednici alen $ id uid=1000(alen) gid=1000(alen) groups=1000(alen),27(sudo)
Nove grupe nema. Članstvo se učitava pri prijavi, pa se moraš odjaviti i prijaviti. Privremeno rešenje:
$ newgrp urednici
Ovo je čest izvor zbunjenosti — dodaš korisnika u grupu, on kaže da i dalje ne može, a ti proveriš i vidiš da je sve podešeno kako treba.
Znakovi koje ne objašnjava običan rwx
s umesto x
$ ls -l /usr/bin/passwd -rwsr-xr-x 1 root root 68208 Mar 23 2026 /usr/bin/passwd
SUID: program se izvršava sa pravima vlasnika. Objašnjeno u lekciji Kontrola privilegija.
t na kraju
$ ls -ld /tmp drwxrwxrwt 10 root root 4096 Aug 22 14:02 /tmp
Sticky bit: brisati sme samo vlasnik fajla, uprkos w za
sve.
+ na kraju
$ ls -l projekat.txt -rw-rw-r--+ 1 alen urednici 1024 Aug 22 13:15 projekat.txt
Plus znači da fajl ima dodatna ACL pravila, koja
ls -l ne prikazuje:
$ getfacl projekat.txt # file: projekat.txt user::rw- user:marko:rw- group::rw- mask::rw- other::r--
Marko ima pravo pisanja iako nije ni vlasnik ni u grupi. Ako se dozvole
ponašaju drugačije nego što ls -l sugeriše, prvo proveri ima li
plusa. Detaljno na stranicama
Lista kontrole pristupa i
getfacl.
. na kraju
$ ls -l /var/www/html/index.html -rw-r--r--. 1 root root 612 Aug 22 09:00 index.html
Tačka znači SELinux kontekst. Ako je pristup odbijen a sve ostalo izgleda ispravno, uzrok je često tu — vidi SELinux.
Pronalaženje po dozvolama
$ find /var/www -type f -perm 777 $ find ~ -name "id_*" -not -perm 600 $ find / -perm -4000 -type f 2>/dev/null $ find /home -type d -perm -o+w 2>/dev/null
Redom: fajlovi sa punim pravima, SSH ključevi sa preširokim dozvolama, SUID programi, i direktorijumi u koje svako sme da piše. Prve dve komande vredi povremeno pustiti na svom serveru.
Razlika u zapisu: -perm 777 traži tačno tu vrednost,
-perm -4000 traži da je taj bit postavljen bez obzira na
ostale. Više na stranici find.
Kratka referenca
- Deset znakova: tip + vlasnik + grupa + ostali
r=4,w=2,x=1 ·644običan fajl ·755skripta i direktorijum ·600privatno- Direktorijum:
rlistanje imena,xulazak,wpravljenje i brisanje - Provera staje na prvom poklapanju — vlasnik, pa grupa, pa ostali
stat -c "%a %A %U %G" fajl— dozvole u oba oblikanamei -l putanja— dozvole celog lanca direktorijumasudo -u korisnik test -r fajl— provera tuđih prava+na kraju znači ACL ·.znači SELinuxfind -perm— pronalaženje po dozvolama
Vežba
$ mkdir -p ~/vezba-prava/podaci $ echo "sadrzaj" > ~/vezba-prava/podaci/fajl.txt $ cd ~/vezba-prava
- Pretvori
-rwxr-x---u brojčani oblik napamet, pa proveri sastat. - Postavi direktorijumu
podacidozvole444i objasni sebi zašto ne možeš pročitati fajl unutra, iako mu ime vidiš. - Postavi
111i proveri da li možeš pročitati fajl ako mu znaš tačno ime. Objasni razliku u odnosu na prethodni zadatak. - Napravi fajl sa dozvolama
044i pokušaj da ga pročitaš kao vlasnik. Objasni poruku. - Napravi lanac od tri ugnežđena direktorijuma, oduzmi
xsrednjem, pa pomoćunamei -lpokaži gde tačno pristup pada.
Četvrti zadatak je pravilo o zaustavljanju na prvom poklapanju, u jednoj komandi.
Menjanje dozvola je na stranicama chmod, chown i chgrp, podrazumevane dozvole novih fajlova na stranici umask, a pregled cele oblasti na stranici Podešavanje prava pristupa.
Cela lekcija je deo vodiča Linux osnove.
Comments
Post a Comment