Linux E X P R E S

Facebook

Práva sú výsadou Linuxu

"Všetko okolo nás pozostáva z práv, z ich prerozdeľovania, niekedy i nespravodlivého...", vraví Richard Stallman. Či už v Unixe sú práva rozdelené spravodlivo alebo nespravodlivo, to nech posúdi užívateľ, ale vo svete to platí jednoznačne. Ak si však heslovite preberieme systém práv v Linuxe a nahliadneme do jeho súborového systému, lepšie pochopíme, akým spôsobom funguje multiužívateľské prostredie, ktoré sa často podobá aj reálnemu životu... Juraj Šípoš .


Súbory a adresáre

Systém súborov v Unixe je tvorený hierarchickým usporiadaním. Všetko sa začína v koreňovom adresári /. Adresár obsahuje položky - súbory. Každá obsahuje meno, veľkosť, informácie o právach... Linux (Unix) je multiužívateľský systém, v ktorom si užívatelia môžu prideliť k súborom rôzne prístupové práva. Každý používateľ má svoju identifikáciu (user ID) - číslo, ktoré ho identifikuje. Každý súbor v systéme Unix má jedného vlastníka - UID a jedného skupinového vlastníka - GID (Group ID).

Jadro priraďuje každému procesu štyri čísla: reálne UID, efektívne UID, reálne GID a efektívne GID. Superužívateľ má ako UID nulu (0), čo znamená, že užívateľ s UID=0 má neobmedzený prístup k všetkým súborom a príkazom v Unixe. Užívatelia patria do jednej alebo viac skupín. Pomocou skupín docielime, že obmedzíme prístup, resp. logicky od seba separujeme skupiny užívateľov s inými právami. Aby sme zistili, ako nás systém identifikuje, použijeme príkaz id.

[root@root] id
uid=550(alice)  gid=100(users)
groups=100(users),6(disk)

Najzákladnejšie operácie, na ktoré má práva väčšinou iba superužívateľ, sú:

  • Pripájanie/odpájanie súborových systémov (diskov).
  • Manipulácia zariadení v adresári /dev.
  • Nastavenie systémového času.
  • Menenie práv všetkých súborov - globálna politika.
  • Konfigurácia siete.
  • Prideliť atribút "s- bit" akýmkoľvek súborom/adresárom.
  • Vypnutie počítača (system shut down).

Operácií môže byť viac. Iba administrátor môže inštalovať nové jadro, meniť názov počítača (hostname) atď.

Sloboda je mať čo možno najviac výsad

Právo v multiužívateľských systémoch (prostredí) znamená akýkoľvek krok, ktorý môžeme robiť - súbory čítať, mazať, spúšťať (ak sú binárne), pripájať disky, napaľovať CD/DVD, používať lokálnu/sieťovú tlačiareň, prípadne zaťažovať procesor našimi aplikáciami a do akej miery. Práva nemusíme mať vôbec - v takom prípade budeme vidieť iba čiernu (alebo modrú?) obrazovku, môžeme ich mať minimálne alebo maximálne. Práva prideľuje administrátor, teda superužívateľ (root).

Nielen superužívateľ, ale aj ďalší užívatelia môžu prideliť práva podskupinám.

  • Práva možno rozdeliť do skupín:
  • Práva pre súbory a manipuláciu s nimi.
  • Práva pre periférne zariadenia počítača.
  • Práva pre sieťové možnosti.
  • Atď.

Skupiny pravdaže predstavujú užívateľov. Zmenu práv súborov robíme príkazom chmod. Z bezpečnostných dôvodov len užívateľ root alebo vlastník súborov môže meniť práva globálne. S príkazom chmod môžeme použiť číselné alebo symbolické zadanie (ugoa +- rwx). Písmeno u znamená user-file owner (vlastník súborov), g - group (skupina), o - others (ostatní), a - all (všetci), po čom nasleduje buď + (znamienko plus) alebo - (znamienko mínus). Znamienkom plus pridelíme právo, znamienkom mínus ho odoberieme, pričom použijeme r (read - čítať), w (write - zapisovať), x (execute - spustiť). Ak chceme, aby do súboru subor.txt mohli všetci užívatelia zapisovať, do príkazového riadku napíšeme:

chmod a+w subor.txt

alebo

chmod 666 subor.txt

Umask

Príkaz umask je obdobou príkazu chmod, ale pracuje s opačnými bitmi a je pre všeobecné - globálne nastavenie práv. To jest napríklad si nastavíte program tak, aby zakaždým ukladal súbory s právami povedzme v hodnotách ekvivalentným príkazu chmod 600 (čítať a zapisovať môže iba vlastník). Čísla určíte rovnako - budete vychádzať z utility chmod, ale každé číslo odpočítate od čísla 7. Ak chcete sebe priradiť všetky práva (7), skupine chcete dať právo čítať a spúšťať súbory (5) a ostatným všetky práva zobrať (0), čo inak docielite zadaním chmod 750 subor.txt, potom odpočítate každé číslo uvedené v zátvorke od čísla 7, a tak dostanete 0 - pre seba (7 - 7 = 0), 2 - pre skupinu (7 - 5 = 2) a 7 - pre ostatných (7 - 0 = 0). Napokon napíšete do inicializačného skriptu príkaz: umask 027.

Umask nastavuje teda implicitné (default) práva pre súbory. Ak vytvoríte nejaký súbor (napr. v editore vi, Perl skript a pod.), bude mať implicitne také práva, aké ste zadefinovali pomocou umask.

Vlastnosti súborov podrobnejšie

chmod 755 je skrátená podoba chmod 0755. Prístupové práva sú uložené v 12 bitoch a popisujú sa nasledovne:

4000 SUID (s-bit, setuid)
2000 SGID (s-bit, setgid)
1000 "sticky bit" alebo t-bit
0400 r (čítať) pre vlastníka
0200 w (zapisovať) pre vlastníka
0100 x (spúšťať) pre vlastníka

S príkazom chmod pracujete s číslami [4, 2, 1], ktorých súčty predstavujú kombináciu práv. Významovo ideme zľava doprava - prvé číslo je vlastník, druhé skupina a tretie ostatní: 770 hodnota predstavuje číslo 7 - (sčítanie hodnôt 1 + 2 + 4) pre vlastníka a aj skupinu, teda súčet čísiel 1 [právo spúšťať súbory - x], 2 [právo zapisovať - w] a 4 [právo čítať - r ]), nula na konci znamená, že "ostatní" nemajú nijaké práva.

Bity

V červenej farbe vpravo sú vyznačené základné hodnoty, ktoré sa sčítavajú, ostatné sú už sčítané hodnoty.

Ak použijete príkaz ls -l a uvidíte výpis ako drwx------, pomlčka (-) znamená, že všetky prístupové práva pre daný súbor/adresár sú odobraté; budete vedieť aj komu. Ak uvidíte drwxrwxrwx - d je adresár (directory) a 9 inštancií rwx predstavuje vlastníka (rwx), skupinu (rwx) a ostatných (rwx). V tomto prípade majú všetci maximálne práva. drwxrw-rw- znamená, že všetky práva sú povolené, len skupina a ostatní nemajú právo súbory spúšťať.

Čo znamená bit "s" a "t"?

t-bit

Príkaz chmod +t alebo chmod 1000 (namiesto posledných troch núl treba zadať vami želané atribúty práv). Keď pracujete s Linuxom istý čas, všimnete si, že pri práci so súbormi nemáte do činenia len s právami typu rwx. Keď sa lepšie pozriete na súborový systém, zistíte, že existujú bity typu s a t:

$ ls -ld /usr/bin/crontab  /usr/bin/passwd  /usr/sbin/sendmail  /tmp
drwxrwxrwt  5 root  root   1024 Jan 1 17:21 /tmp
-rwsr-xr-x       1 root   root   0328  May 6 1998 /usr/bin/crontab
-r-sr-xr-x       1 root   bin    5613  Apr 27 1998 /usr/bin/passwd
-rwsr-sr-x       1 root   mail   89524 Dec 3 22:18 /usr/sbin/sendmail

Výraz "sticky bit", nazývaný aj "t-bit" (nie s-bit), je odvodený od toho, že keď je súbor s atribútom "sticky" spustený, ostane v RAM ("stick" - nalepiť). Normálne však, ak program skončil, je z RAM uvoľnený a miesto, kde sa nachádzal, bude použité niečím iným. Ak je kód programu v RAM, program zbehne rýchlejšie, pretože kód nemusí byť opätovne spúšťaný z disku.

V súčasnosti však môže s príchodom zdieľaných knižníc a lacnej RAM väčšina Unixov atribút "sticky bit" v tomto koncepte ignorovať; používa sa však často v kombinácii s adresárom /tmp:

$ls -ld /tmp
drwxrwxrwt  5 root   root   1024 Jan 1 17:21 /tmp

Posledné písmenko "t" na konci (...rwt) hovorí za seba. T-bit má však ďalší podstatný význam - normálne, ak adresár nemá t-bit atribút, súbory možno v adresári mazať (ak je adresár s atribútom "writable" - w), ak má vlastník právo zapisovať do adresára. Ak máte adresár, kde ktokoľvek môže umiestniť súbory, potom ich aj ktokoľvek môže vymazať, čím vymaže súbory niekoho iného. Atribút t-bit toto správanie mení. Ak má adresár atribút t-bit, tak len vlastník súborov smie vymazať súbory. Atribút t-bit nastavíme príkazom chmod a+tw alebo chmod 1777.

Príklad: Ivan si vytvorí adresár s atribútom t-bit:

$ mkdir mytmp
chmod 1777 mytmp

Peter si do tohto adresára uloží ním vytvorený súbor f.txt:

$ ls -al
drwxrwxrwt   3 ivan    users  1024 Jan  1 20:30 ./
-rw-r--r--   1 peter   users     0 Jan  1 20:31   f.txt

Tento súbor môže vymazať Ivan (vlastník adresára) a Peter (vlastník súboru), ale nemôže ho vymazať Juro:

$whoami
juro
rm -f petrov_subor_v_adresari_ivana.txt
rm: petrov_subor_v_adresari_ivana.txt: Operation not permitted

S-bit

chmod u+s file (chmod 4000)
chmod g+s file (chmod 2000)

Procesy Linuxu bežia pod vlastníkmi, ktorí majú prístup k zdrojom (súborom, zariadeniam atď.). Existujú dva používateľské ID - tzv. "real user-ID" (RUID) a "effective user-ID" (EUID). Reálne identifikátory UID a GID procesov budú rovnaké ako UID a GID užívateľa, ktorý spustil proces. Každý proces, ktorý spustíte, bude mať vaše UID a GID. Efektívne UID determinuje prístup k súborom - aké operácie smie vykonať proces. Vo väčšine prípadov bude efektívne UID a GID rovnaké ako reálne UID a GID.

S-bit nastavíme číslom 4 napríklad takto: chmod 4755 file alebo chmod u+s file. S-bit znamená, že súbor pobeží pod UID vlastníka bez ohľadu na to, kto ho spustil. Ide o veľmi silnú vlastnosť, najmä ak zoberieme do úvahy skutočnosť, že vlastníkom atribútu s-bit je root. Tu však je ohrozená bezpečnosť, lebo každý môže robiť veci tak, ako ich robí superužívateľ.

Ak sa chcete napríklad pripájať na internet cez dial-up, čo je možné len z administrátorského účtu, použite príkaz (ako root): chmod 4711 /usr/sbin/pppd, čím programu pppd priradíte setuid root a budete ho môcť spúšťať z vášho neprivilegovaného účtu. To isté sa pochopiteľne týka aj iných programov, ak vám nepôjdu pod účtom obyčajného užívateľa. Ak chcete napaľovať CD, aplikujte príkaz:

chmod 4111 /usr/bin/cdrecord

Čísla 111 znamenajú, že ktokoľvek smie súbor /usr/bin/cdrecord spustiť. Podobne môžete meniť práva zariadení aj v adresári /dev. Nasledovným malým hackerským trikom získate privilégiá super administrátora, ale samozrejme za predpokladu, že vás super administrátor nechá na chvíľku posedieť pri počítači na vlastnú zodpovednosť. Vykonáte nasledovné:

# cp /bin/sh /home/fero/dostalsomta

Okopírujete súbor /bin/sh do vášho používateľského adresára, ale kópia súboru sh bude mať názov dostalsomta. Ďalším príkazom dáte súboru dostalsomta atribút s-bit (pravdaže ako užívateľ root):

# chmod a+s /home/fero/dostalsomta

Teraz sa vráti usmiaty super administrátor od posedenia pri Veľkopopovickom kozli a vy sa mu poďakujete. Prídete domov a prihlásite sa na počítač modemom, vo vašom adresári si nájdete súbor dostalsomta s atribútom s-bit. Súbor spustíte a získate rootovské privilégiá:

$  dostalsomta
#

Dolár ($) sa zmení na mriežku (#) a vy môžete robiť čokoľvek rovnako ako superužívateľ. Vidieť teda, že s-bit predstavuje obrovské bezpečnostné riziko.

Niektoré tipy

Pre nastavovanie práv sa začiatočníkom môže javiť veľmi praktický Midnight Commander, čo je textový prehliadač súborov podobný Norton Commanderu z čias DOS.

Do menu programu Midnight Commander sa dostanete klávesou [F9], potom vyberiete File-Advanced Chown a nastavíte práva podľa želania.

Vytvorte si nasledujúci skript pod názvom myscript a aplikujte naň príkaz chmod 755 (chmod 755 myscript), aby bol spustiteľný:

 #!/bin/sh
echo " effective user-ID:"
id -un
echo " real user-ID:"
id -unr
echo " group ID:"
id -gn

Po vykonaní príkazu na mojom počítači, kde som sa prihlásil ako užívateľ juro, vidím toto:

[juro@two mydir]$ myscript
effective user/ID:
juro
real user-ID:
juro
group ID:
juro

Záver

S právami treba narábať opatrne - sú súčasťou reálneho života, niekto má moc, iným je odobratá. Nemožno chápať príklady pre nastavenie atribútu "s-bit" ako doporučenie niečo takéto robiť. Tento príspevok sa nezaoberá bezpečnostnými otázkami, iba názorne ukazuje, ako fungujú práva v Linuxe a ako možno používať rôzne atribúty pre ich nastavenie. Vyššie uvedené príkazy však skúšajte veľmi opatrne a na vlastné riziko.

Poznámky:

rwx sa vždy píše v tomto poradí (Read, Write, eXecute). Príkaz ls -l vypíše atribúty súborov, ale i adresárov, teda aj to, kto má právo zapisovať do súboru (-rw-rw-rw-) alebo kto ho nemá (-rwxr-xr-x). Pomlčka na samom začiatku (-rwxrwxrwx) indikuje, že nemáme do činenia s adresárom. Ak právo nie je k dispozícii, v textovom reťazci rwx uvidíte pomlčku (r-x).

Príkazom chmod 644 subor.txt docielime, že vlastník bude môcť do súboru zapisovať, ale pre všetkých ostatných bude k dispozícii len právo subor.txt čítať. Toto pravda možno nastaviť aj pre adresár a výpis príkazom ls -l indikuje, že pre adresár platí právo 644 (t. j. rw- pre vlastníka, r-- pre skupinu a ostatných):

drw-r--r--  2 juro  wheel    512 Aug 21 16:38 obrazky

Práva sebe nastavíme číselne pomocou príkazu chmod (čísla nahradíme, podľa potreby, požadovanými atribútmi):

  • chmod 400 file - pre seba máme právo čítať, skupine a ostatným ho odoberieme
  • chmod 440 file - pre seba aj pre skupinu máme právo súbor čítať
  • chmod 444 file - pre seba, skupinu a aj ostatných platí právo čítať súbor
  • chmod 222 file - Súboru file pridelíme práva na zapisovanie pre všetkých (skupine aj ostatným).
  • chmod 444 /adresar - Pridelíme práva na čítanie pre všetkých.
  • chmod 111 file - Pridelíme práva na spustenie súborov pre všetkých.
  • chmod 777 file - Aktivujeme všetky práva.
  • chmod 000 file - Všetky práva sú zakázané.
  • chattr +i file - Týmto docielime, že súbor bude imúnny (i - immune) voči vymazaniu.

Diskuze (0) Nahoru