Dozvole datoteka na Linuxu: rješavanje problema s pristupom i greškama

Article Image

Kako dozvole datoteka utiču na pristup i zašto često vidite greške

Na Linuxu su dozvole datoteka srž sigurnosti i kontrole pristupa. Kada pokušavate da otvorite, izvršite ili mijenjate fajl i sistem vam odgovori sa “Permission denied”, to obično znači da trenutni korisnik nema odgovarajuća prava. Kao korisnik, potrebno je da razumiješ osnovne elemente: ko je vlasnik fajla, kojoj grupi pripada i koja prava su postavljena za vlasnika, grupu i ostale korisnike.

Razumijevanje dozvola pomaže ti da razlikuješ situacije koje se brzo rješavaju (npr. promjena vlasnika ili dodavanje bitke za izvršavanje), od onih koje zahtijevaju dublju dijagnostiku (npr. mount opcije, ACL-ovi, SELinux/AppArmor). U nastavku razlažemo ključne pojmove koje ćeš često sretati pri rješavanju problema s pristupom.

Osnovni koncepti: vlasnik, grupa i prava (rwx)

Dozvole u Linuxu se sastoje od tri grupe prava: vlasnik (owner), grupa (group) i ostali (others). Svaka grupa ima tri tipa prava predstavljena sa slovima: r (read), w (write), x (execute).

  • r (read) — pravo da pročitaš sadržaj fajla ili listu direktorijuma.
  • w (write) — pravo da mijenjaš sadržaj fajla ili da stvaraš/brišeš fajlove u direktorijumu.
  • x (execute) — pravo da izvršiš fajl kao program ili da uđeš u direktorijum.

Prava se prikazuju naredbom ls -l u obliku npr. -rwxr-xr--. Prva tri znaka odnose se na vlasnika, naredna tri na grupu, zadnja tri na ostale. Pored toga postoji i numerička reprezentacija (octal) — npr. 755 znači da vlasnik ima rwx (7), grupa ima r-x (5), a ostali r-x (5).

Kao korisnik, često ćeš koristiti:

  • chmod za promjenu prava (npr. chmod 644 file ili chmod u+x script.sh).
  • chown za promjenu vlasnika ili grupe (npr. chown user:group file).
  • ls -l i stat za provjeru trenutnih prava i vlasništva.

Uobičajeni uzroci grešaka “Permission denied” koje treba brzo provjeriti

Kada naiđeš na grešku, počni s jednostavnim provjerama:

  • Da li si vlasnik fajla ili pripadaš grupi koja ima potrebna prava? Ako ne, chown ili grupna promjena može pomoći.
  • Da li fajl ima postavljen execute bit ako pokušavaš da ga pokreneš? (npr. chmod +x skripta).
  • Da li direktorijum iznad fajla dozvoljava pristup (execute bit na direktorijumu je potreban za ulazak)?
  • Je li fajlsistem mountovan sa opcijom samo za čitanje (ro) ili s opcijama koje onemogućavaju izvršenje?
  • Postoje li dodatne kontrole poput ACL-a, SELinux ili AppArmor koje preuzimaju kontrolu pristupa?

Ove provjere ti često daju hitan razlog greške i vode ka narednim koracima. U sljedećem dijelu ćemo korak-po-korak pokazati konkretne komande, primjere i kako dijagnostikovati kompleksnije uzroke poput ACL-ova i sigurnosnih politika.

Article Image

Korak-po-korak dijagnostika: komande i praktični primjeri

Kada si suočen sa greškom, slijedi ovaj red koraka da brzo suziš problem i primijeniš rješenje:

  1. Provjeri trenutna prava i vlasništvo:

    Pokreni ls -l /put/do/fajla ili za više detalja stat /put/do/fajla. Izlaz pokazuje vlasnika, grupu i rwx bitove. Ako nema execute bita za skriptu, dodaj ga: chmod u+x skripta.sh.

  2. Provjeri dozvole roditeljskih direktorijuma:

    Da bi ušao u direktorijum moraš imati execute bit na svakom nivou. Npr. ls -ld /put /put/do /put/do/folder. Ako direktorijum nema x za tebe, nisi u mogućnosti da pristupiš fajlu čak i ako fajl ima prava.

  3. Provjeri ACL-ove:

    Pokreni getfacl /put/do/fajla. Ako vidiš dodatne unose (npr. user:neki:rw-), ACL može prebrisati standardna prava. Dodavanje prava preko ACL: setfacl -m u:korisnik:rw /put/do/fajla.

  4. Provjeri mount opcije:

    Pokreni mount | grep /put ili pogledaj /etc/fstab. Opcije poput ro (read-only) ili noexec onemogućavaju pisanje ili izvršavanje. Ako je filesystem mountovan s noexec, izvršavanje skripte iz tog mount-a neće proći.

  5. Provjeri sigurnosne module:

    Za SELinux: getenforce ili sestatus, i ls -Z fajl za kontekst. Za AppArmor: aa-status. Ako sigurnosna politika blokira pristup, logovi u /var/log/audit/audit.log ili dmesg sadrže poruke.

Rješavanje problema s ACL-ovima i kako ih primijeniti bez grešaka

ACL (Access Control List) daje finksniju kontrolu od klasičnih rwx prava. Najčešći scenarij: fajl ima prava 644, ali korisnik i dalje ne može pristupiti jer ACL eksplicitno odbija pravo.

Osnovne komande:

  • getfacl fajl — prikaže postojeće ACL unose.
  • setfacl -m u:ime:rw fajl — dodaje pravo čitanja i pisanja korisniku.
  • setfacl -x u:ime fajl — uklanja ACL unos.
  • setfacl -b fajl — briše sve ACL-ove (vrati na standardna prava).

Primjer: ako getfacl pokazuje # file: fajl i user:guest:---, korisnik guest je eksplicitno blokiran. Ukloni ili izmijeni taj unos. Također provjeri masku ACL-a (mask) jer može ograničiti prava za sve navedene korisnike/grupe.

SELinux, AppArmor i specijalni bitovi: što još treba provjeriti

Osim standardnih dozvola i ACL-a, sigurnosni moduli i specijalni bitovi često uzrokuju “Permission denied”.

SELinux:

  • getenforce — vraća Enforcing/Permissive/Disabled.
  • ls -Z fajl — prikazuje SELinux kontekst. Ako je kontekst pogrešan, koristi chcon privremeno ili restorecon -v fajl da ga vratiš na zadani.
  • Logovi: ausearch -m avc -ts recent ili journalctl -k pomažu pronaći blokade.

AppArmor:

  • aa-status — prikazuje profile i njihov status.
  • Privremeno postavljanje profila u complain režim: sudo aa-complain /usr/bin/program.

Specijalni bitovi:

  • setuid (u+s) — izvršni fajl se pokreće s pravima vlasnika. Prikaz u ls -l npr. -rwsr-xr-x.
  • setgid (g+s) — fajl ili direktorijum nasljeđuje grupu.
  • sticky bit (+t) — na /tmp sprečava brisanje tuđih fajlova: drwxrwxrwt.

Provjerom ovih stavki i korištenjem navedenih komandi možeš brzo identificirati i ispraviti većinu problema s pristupom na Linuxu.

Article Image

Dalji koraci i preporuke

Kada posao sa dozvolama postane svakodnevnica, razvijanje sistematičnog pristupa štedi vrijeme i smanjuje rizik od grešaka. Prvo, uvijek radi promjene sa najmanje privilegija potrebnih i testiraj u kontrolisanom okruženju prije promjene produkcijskih sistema. Drugo, vodi evidenciju o većim izmjenama vlasništva ili mount opcija i pravi backup važnih podataka prije masovnih chmod/chown operacija. Treće, koristi logove (audit, dmesg, journal) i alatke kao što su getfacl/setfacl ili restorecon da bi ubrzao dijagnostiku i ispravke.

  • Primjeni princip najmanjih privilegija i grupnu organizaciju korisnika.
  • Testiraj promjene na development/staging sistemu prije produkcije.
  • Provjeri mount opcije i sigurnosne module prije zaključivanja da su standardna prava uzrok problema.
  • Koristi dokumentaciju i manual stranice za konkretne komande — npr. man strana za chmod.

Frequently Asked Questions

Šta da prvo provjerim kada dobijem poruku “Permission denied”?

Pogledaj vlasnika i rwx prava fajla, zatim provjeri execute bit na roditeljskim direktorijumima. Ako su prava ok, provjeri ACL-ove (getfacl), mount opcije (je li fajlsistem samo za čitanje ili ima noexec) i sigurnosne module kao SELinux/AppArmor koji mogu blokirati pristup.

Kako privremeno pokrenuti skriptu ako je fajlsistem mountovan sa opcijom noexec?

Najjednostavnije je kopirati skriptu na lokalni fajlsistem koji dozvoljava izvršavanje (npr. /tmp) ili pokrenuti skriptu preko interpretera (npr. pozvati shell da je pročita). Alternativno, promijeni mount opcije ili remount sa uklonjenim noexec ako je to sigurno i dozvoljeno.

Da li ACL može potpuno zamijeniti standardne rwx dozvole?

ACL ne zamjenjuje, već proširuje standardne dozvole: omogućava fino podešavanje pristupa za pojedinačne korisnike i grupe. Međutim, maska ACL-a može ograničiti efekt ACL unosa, pa je važno provjeriti i standardna prava i ACL zapise zajedno (getfacl i setfacl su korisni alati).