Prístupové práva - {CHMOD} -2

06.11.2007 15:27 | blackhole_socket

Takže po zvažení kometárov pri prvom članku som sa rozhodol že napíšem i članok o prístupovích právach zameraný na : statický 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 statický 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 statický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.

_____________________________________________________________________________
Tak a toto je už naozaj všetko z práv v unixovích systémoch (ešte existuje niečo také ako lsattr a chattr). Dúfam že ste stohto článku aspon niečo nové dozvedeli.

    • Re: Prístupové práva - {CHMOD} -2 06.11.2007 | 17:18
      Avatar blackhole_matej   Používateľ

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

      To sice ano, ale kym nema "executable" (x) bit, nespustis ho. Velke "S" znamena, ze je suid/sgid, ale nie spustitelny. Male "s" znamena, ze je suid/sgid, a aj spustitelny. Napriklad:
      -rwS--x--x 1 test users 37880 Nov 6 17:08 program*
      Znamena, ze spustit ho mozu vsetci okrem pouzivatela "test", a pri spusteni by mal dostat uid pouzivatela test.

      Podobne velke "T" sa pouziva u adresarov, ktore maju "sticky" bit, ale "others" donho vstupovat nemozu:
      drwxrwx--T 2 test users 1024 Nov 6 17:10 badtmp/

      Sgid je tiez pouzitelne na adresare. Vtedy nove subory/adresare vytvorene v nom dostanu skupinu, aku ma tento nadradeny adresar. Suid takto na adresare afaik nefunguje, inak by sa dali robit zvrhlosti a obchadzat quoty.

    • Re: Prístupové práva - {CHMOD} -2 07.11.2007 | 08:34
      Avatar blackhole   Návštevník

      Prosim oprav si v clanku toto:
      - 644 (rw-rw-r--) pre súbory

      ne toto:
      - 664 (rw-rw-r--) pre súbory

      • Re: Prístupové práva - {CHMOD} -2 07.11.2007 | 11:05
        Avatar blackhole_socket   Používateľ

        a ako si to mám akože opraviť (čo tam mám optraviť)? ... aha myslíš to podla tej masky ? ...robil som to virtualne tak su tam chybičky
        _______________________________________________________
        Linux je ako okena,kvalitný a lacný čistič oken...