Prístupové práva (CHMOD) -2

Zdroj: SOOM.cz [ISSN 1804-7270]
Autor: socket
Datum: 24.2.2008
Hodnocení/Hlasovalo: 0/0

Zhrnutie funkcie prístupovích práv na *nixoch.

Vitajte pri druhom článku o prístupovích právach zameranom na : stický príznak v suboroch, suid a sgid, implicitné práva + umask.



Tak začnem tým ako nastaviť súbor s príznakom "statický".
Týmto nastavením nedovolíme užívatelovy zmazať súbory v adresáry ktoré mu nepatria (čiže patria iním userom prípadne root-ovy).
Toto nastavenie sa prevádza príkazom :

chmod +t

tento príznak sa označije ako statický bit.


socket@blackbox:~/Desktop$ ls -ld statický_bit
drwxr-xr-x 2 socket socket 4096 2007-11-06 14:45 statický_bit
socket@blackbox:~/Desktop$ chmod +t statický_bit
socket@blackbox:~/Desktop$ ls -ld statický_bit
drwxr-xr-t 2 socket socket 4096 2007-11-06 14:45 statický_bit

Všimnite si že nastavenie príznaku je indikované znakom t na poslednom mieste v
zozname práv.
Teraz je príznak nastavený a užívatelia nebudú môcť mazať súbory ktoré im nepatria.


test@blackbox:~/Desktop$ cd statický_bit
test@blackbox:~/Desktop/statický_bit$ ls -l
celkom 1
-rw-r--r-- 1 socket socket 0 2007-11-06 14:45 subor
test@blackbox:~/Desktop/statický_bit$ rm -f subor
rm : cannot unlink 'subor' : Operation not permitted

Po nastavení príznaku stický nemôže užívatel test zmazať subor užívatela socket (ale stale by socket mohol zmazať vlastný subor).


socket@blackbox:~/Desktop/statický_bit$ ls -l
celkom 1
-rw-r--r-- 1 socket socket 0 2007-11-06 14:45 subor

socket@blackbox:~/Desktop/statický_bit$ rm -f subor
socket@blackbox:~/Desktop/statický_bit$ ls -l
celkom 0


Klasickým príkladom adresára s nasatveným stickým príznakom je adresár /tmp,ktorý
všeci užívatelia používajú k odkladaniu dočasných dát (napr. cache z netu).
Všetci užívatelia tam môžu vytvárať súbory a adresáre ale mazať môžu len tie, ktoré im patria :


socket@blackbox:/$ ls -ld /tmp
drwxrwxrwt 15 root root 4096 2007-11-06 14:45 /tmp



Teraz prejde ku suid a sgid.

Okrem príznakov čítania (r), zápisu (w), spustenia (x) a statického bitu (t) existujú ešte dalšie dva príznaky, ktoré je možné u súborov nastaviť.
Prvím z nich je príznak set-user-id, skrátene iba suid, ktorý zpôsobí, že spustený program beží s právy jeho vlastníka bez ohladu na to, kto ho spustil.
Tento príznak sa nastavuje takto :


blackbox:/home/socket/Desktop/adresár# ls -l a
-rw-r--r-- 1 socket socket 0 2007-11-06 15:16 a
blackbox:/home/socket/Desktop/adresár# chmod u+s a
blackbox:/home/socket/Desktop/adresár# ls -l a
-rwSr--r-- 1 socket socket 0 2007-11-06 15:16 a


Hodnota S na mieste spustitelného príznaku užívatela indikuje nastavenie suid príznaku.

Podobne existuje príznak set-group-id (skrátene iba sgid), ktorý spôsobí že program pobeží jako člen skupiny vlastniacej súbor bez ohladu na to, kto program spustil.
Príznak sa nastavuje podobne :


blackbox:/home/socket/Desktop/adresár# ls -l b
-rw-r--r-- 1 socket socket 0 2007-11-06 15:23 b
blackbox:/home/socket/Desktop/adresár# chmod g+s b
blackbox:/home/socket/Desktop/adresár# ls -l b
-rw-r-Sr-- 1 socket socket 0 2007-11-06 15:23 b



Takže dúfam že ste pochopili zatial vššetko teraz si niečo povieme o umask.

Ked užívatel vytvorí súbor alebo adresár, budú mu nastavené implicitné práva:


blackbox:/home/socket/Desktop/adresár# touch a.txt
blackbox:/home/socket/Desktop/adresár# mkdir priecinok_a
blackbox:/home/socket/Desktop/adresár# ls -l
celkom 4
-rw-rw-r-- 1 root root 0 2007-11-06 15:30 a.txt
drwxrwxr-x 2 root root 4096 2007-11-06 15:30 priecinok_a


Všimnite si že implicitné práva užívatela socket sú :

- 644 (rw-rw-r--) pre súbory
- 775 (rwxrwxr-x) pre adresáre


Implicitné hodnoty prístupovích práv sa nastavujú podla hodnoty umask danho užívatela.
Táto hodnota slúži k odmaskovaniu bitu z "najotvorenejšieho" nastavenia práv, ktoré je 666 pre súbory a 777 pre adresáre.
Hodnotu tejto masky zistíme príkazom umask :

blackbox:/home/socket/Desktop/adresár# umask
002


Užívatel socket má teda masku umask nastavenú na hodnotu 002.
Jednoduchá metóda ako zistiť implicitné pridelené práva pri vytvorení suboru alebo adresára, spočíva v odpočítaní hodnoty masky od plného pridelení práv :


Súbory 666 Adresáre 777
..............-002 (umask) ..................... -002 (umask)
...............664 ................................ 775


Nastavenie implicitných práv môžeme zmaniť príkazom umask. Najstriktnejšim nastavením dostaneme hodnotu
777 :


socket@blackbox:~/Desktop/adresár$ umask 777
socket@blackbox:~/Desktop/adresár$ touch c
socket@blackbox:~/Desktop/adresár$ ls -l
celkom 4
-rw-r--r-- 1 root root 0 2007-11-06 15:30 a.txt
---------- 1 socket socket 0 2007-11-06 16:04 c
drwxr-xr-x 2 root root 4096 2007-11-06 15:30 priecinok_a


Ide samozrejmé o príliš velké nastavenie, pretože ani užívatel socket nemá právo čítať subor c :

socket@blackbox:~/Desktop/adresár$ cat c
cat: c: Premission denied


Prakticky rozumné a pritom dostatočné prísne je nastaviť masku na hodnotu 077.
Pokial chcete nastaviť masku pri štarte pc stačí do nejakého štartovacieho scriptu (napr. rc-local)
napísať :

umask 077


Pokial vám vypočty v osmičkovej sústave nevyhovujú možete nastaviť masku pomocou symbolickej notácie (príkazom -S).


socket@blackbox:~$ umask -S
u=rwx,g=rwx,o=r
socket@blackbox:~$ umask u=rwx , g=r , o=
socket@blackbox:~$ umask -S
u=rwx,g=r,o=
socket@blackbox:~$ umask
037


Ako administrátor (root) môžete masku zmaniť v subore /etc/profile čím ovplivníte nastavenie všetkých užívatelov.

_____________________________________________________________________________
Pre kompletné vedomosti odporúčam ešte naštudovať lsattr a chattr. Dúfam že ste s tohto článku aspon niečo nové dozvedeli.