Práva v linuxe
Veľmi častým prípadom chýb v linuxe bývajú nesprávne nastavené práva súborov alebo adresárov. Stretol som niekoľko prípadov, kedy zdanlivo veľký problém v systéme bol odstránený práve úpravou práv na niektorom konfiguračnom súbore, prípadne pomocnom súbore daného programu. Napríklad hľadaný problém, prečo sa na web stránke nezobrazuje obrázok vyriešilo pridanie práva “read” na súbor daného obrázku. Ďalší takýto príklad bol v skripte, ktorý sa mal spúšťať v crone a problém bol vyriešený práve úpravami práv skriptu. Popíšem tu jednoduchú teóriu fungovania práv v linuxe resp. v unixe.
V linuxe rozoznávame 3 druhy práv:
- Štandardné unixové práva
- Nadstavbové práva
- Access control list
Medzi štandardné unixové práva patria
Právo Význam Označenie Číselné vyjadrenie
read právo vypísať obsah r 4
write právo zapisovať alebo mazať w 2
execute právo vykonať súbor alebo skript x 1
Aby sme mohli relevantne využiť štandardné práva, prejdime si výpis príkazu ls -l na súbor:
-rw-r–r– 1 root staff 469 Apr 30 2011 subor
Výpis pozostáva z nasledovných položiek:
1. typ súboru a práva súboru
2. počet odkazov na súbor
3. vlastník súboru
4. skupina súboru
5. veľkosť
6. dátum a čas poslednej modifikácie
7. názov
Typy súborov sú popísané v nasledovnej tabuľke:
Označenie Typ súboru
- Obyčajný súbor
d Adresár
c Znakové zariadenie
b Blokové zariadenie
s Socket
p Pomenovaná rúra
Jednotlivým typom súborov sa budem venovať v inej časti.
Aby sme sa mohli venovať štandardným právam, musíme poznať vlastníka a skupinu súboru. Vlastníkom súboru je užívateľ, ktorý ho vytvoril. Zmenu vlastníka môže vykonať iba administrátor a teda užívateľ root. Skupina súboru sa pridelí práve aktuálne nastavená skupina vlastníka.
Majme užívateľov jano a fero. Každý má svoju vlastnú skupinu, užívateľ jano ale bude patriť aj do skupiny fero.
[jano@srv2 ~]$ id jano
uid=502(jano) gid=502(jano) groups=502(jano),503(fero)
[jano@srv2 ~]$ id fero
uid=503(fero) gid=503(fero) groups=503(fero)
[jano@srv2 ~]$
Užívateľ jano vytvorí súbor a keďže jeho hlavná skupina je jano, súbor bude vlastniť jano a skupina bude nastavena na jano:
[jano@srv2 ~]$ touch subor
[jano@srv2 ~]$ ls -l subor
-rw-rw-r– 1 jano jano 0 Feb 14 10:33 subor
[jano@srv2 ~]$
Zmeniť vlastníka môžeme príkazom chown, čo je skratka change owner. Užívateľ jano ale nemôže darovať svoj súbor a preto príkaz skončí chybou:
[jano@srv2 ~]$ chown fero subor
chown: changing ownership of `subor’: Operation not permitted
[jano@srv2 ~]$
Užívateľ jano ale patrí do skupiny fero a preto môže zmeniť skupinu cez príkaz chgrp:
[jano@srv2 ~]$ chgrp fero subor
[jano@srv2 ~]$ ls -l subor
-rw-rw-r– 1 jano fero 0 Feb 14 10:33 subor
[jano@srv2 ~]$
Administrátor môže vlastníka zmeniť:
root@srv2 /home/jano $ chown fero subor
root@srv2 /home/jano $ ll subor
-rw-rw-r– 1 fero fero 0 Feb 14 10:33 subor
root@srv2 /home/jano $
Linuxy a unixy aplikujú jednotlivé práva v poradí vlastník -> skupina -> ostatní.
Ak teda užívateľ chce vykonať nejakú činnosť na súbore, najskôr systém zistí jeho identitu a následne sa riadi jednotlivými právami. Systém si pozrie:
1 je ten užívateľ vlastníkom súboru? Ak áno, systém berie práva vlastníka. Ak nie je vlastníkom, potom pokračuje.
2: je ten užívateľ v skupine, ktorá je definovaná súboru? Ak áno, povolí činnosť na základe skupinových práv. Ak nie je ani vlastníkom ani v skupine, berie práva ostatných a aplikuje ich.
Výpis práv rozdelíme do trojíc:
– | rwx | rw- | r–
Prvá trojica hovorí o právach vlastníka, druhá o právach skupiny a zbytok sú práva ostaných. Nepridelené právo sa označuje znamienkom – (mínus). Úpravu práv vykonáme príkazom chmod, čo je skratka change mode. Osobne preferujem číselné vyjadrenie uvedené v prvej tabuľke. Príkaz sa zapisuje v tvare
[jano@srv2 ~]$ chmod práva súbor
Práva spájame z trojice súčtu číselných vyjadrení trojice práv. Príklad:
[jano@srv2 ~]$ ll
total 0
-rw-rw-r– 1 jano fero 0 Feb 14 10:33 subor
[jano@srv2 ~]$ chmod 764 subor
[jano@srv2 ~]$ ll
total 0
-rwxrw-r– 1 jano fero 0 Feb 14 10:33 subor
[jano@srv2 ~]$
Úplne odobrať práva môžeme zadať príkazom:
[jano@srv2 ~]$ chmod 000 subor
[jano@srv2 ~]$ ll subor
———- 1 jano fero 0 Feb 14 10:33 subor
[jano@srv2 ~]$
Ako vlastník súboru si samozrejme tieto práva môžem prideliť a súbor s takýmito právami nemá veľký význam.
V ďalšej časti rozoberieme príkaz umask, ktorý má vplyv pri na práva pri novovytvorenom súbore.