Kako rade Unix dozvole
Svaka datoteka ima tri skupa od po tri bita dozvola: za vlasnika datoteke, za njenu grupu i za sve ostale. Svaki skup može da dozvoli čitanje (r, vrednost 4), pisanje (w, 2) i izvršavanje (x, 1). Saberite vrednosti u svakom skupu i dobijate jednu oktalnu cifru, zato se dozvole pišu kao tri cifre: rwxr-xr-x je 4+2+1, 4+1, 4+1 = 755.
Za direktorijume isti bitovi znače nešto drugačije: čitanje izlistava stavke, pisanje pravi i briše stavke, a izvršavanje dozvoljava ulazak u direktorijum i pristup datotekama u njemu. Direktorijum bez x je neupotrebljiv čak i sa r.
Specijalni bitovi
Četvrta, vodeća cifra sadrži još tri bita. setuid (4) čini da se izvršna datoteka pokreće kao njen vlasnik, i zato passwd može da menja datoteku čiji je vlasnik root. setgid (2) radi isto za grupu, a na direktorijumu čini da nove datoteke naslede grupu direktorijuma, što je upravo ono što deljeni projektni folderi traže. sticky (1) na direktorijumu sprečava korisnike da brišu tuđe datoteke; /tmp je 1777.
Simbolički režim
chmod prihvata i izmene umesto apsolutnih vrednosti: u+x dodaje izvršavanje vlasniku, go-w uklanja pisanje grupi i ostalima, a=r postavlja svima samo čitanje. X (veliko) dodaje izvršavanje samo direktorijumima i datotekama koje ga već negde imaju, zbog čega je chmod -R a+rX bezbedan način da otvorite stablo za čitanje.
umask
Nove datoteke počinju od 666, a direktorijumi od 777, umanjeno za umask. Uobičajeni umask 022 daje 644 i 755; 077 daje 600 i 700 (privatno). umask bez argumenta prikazuje trenutnu vrednost.
Uobičajene vrednosti
| Oktalno | Simbolički | Upotreba |
|---|---|---|
| 644 | rw-r--r-- | Obične datoteke, veb sadržaj |
| 755 | rwxr-xr-x | Izvršne datoteke, skripte, direktorijumi |
| 600 | rw------- | Privatni ključevi, .env, datoteke sa lozinkama |
| 700 | rwx------ | ~/.ssh i drugi privatni direktorijumi |
| 664 / 775 | rw-rw-r-- / rwxrwxr-x | Datoteke / direktorijumi za zajednički rad u grupi |
| 2775 | rwxrwsr-x | Deljeni direktorijum sa nasleđivanjem grupe |
| 1777 | rwxrwxrwt | /tmp |
| 4755 | rwsr-xr-x | setuid programi kao što su passwd, sudo |
Pitanja
Šta znači chmod 755?
Vlasnik može da čita, piše i izvršava; grupa i ostali mogu da čitaju i izvršavaju. To je uobičajeni režim za programe, skripte i direktorijume.
Šta radi chmod 777 i zašto je loš?
Dozvoljava svakom korisniku na sistemu da čita, piše i izvršava datoteku. Na deljenoj mašini ili onoj izloženoj internetu to znači da bilo ko, uključujući kompromitovani servis, može da je izmeni. Gotovo nikad nije pravo rešenje za grešku sa dozvolama; obično su to vlasništvo (chown) ili 755/644.
Zašto moja skripta javlja „permission denied“?
Nedostaje joj bit za izvršavanje. Pokrenite chmod +x script.sh (ili 755). Ako se nalazi na sistemu datoteka montiranom sa noexec, ili shebang linija pokazuje na nepostojeći interpreter, dobijate istu poruku.
Šta znače s ili t u ls -l?
Malo s na poziciji izvršavanja vlasnika ili grupe znači da je setuid ili setgid postavljen zajedno sa izvršavanjem; veliko S znači da je specijalni bit postavljen bez izvršavanja (obično greška). t i T su isto za sticky bit. Nalepite string u simboličko polje da ga dekodirate.
Koja je razlika između chmod i chown?
chmod menja bitove dozvola; chown menja koji korisnik i grupa poseduju datoteku. Mnogi problemi „permission denied“ su problemi vlasništva: bitovi su ispravni, ali za pogrešnog korisnika.
Kako da postavim dozvole rekurzivno?
chmod -R. Da ne biste svaku datoteku učinili izvršnom, koristite chmod -R u=rwX,go=rX dir, gde veliko X primenjuje izvršavanje samo na direktorijume i već izvršne datoteke.