3.2. Uživatelé a přístupová práva

Od svého zrodu počátkem devadesátých let byl Linux multiuživatelským systémem, takže na něm mohlo současně pracovat více uživatelů. Uživatelé se musí do systému přihlásit (přilogovat) zadáním svého uživatelského jména a hesla. Každý uživatel má vlastní uživatelské jméno a heslo. Tento způsob zaručuje, že každý uživatel bude pracovat jen se svými daty. Normální uživatelé také postrádají řadu práv, jako je možnost instalovat nové programy nebo měnit nastavení celého systému. Tato práva má jediný uživatel – superuživatel neboli root. Díky tomuto uspořádání je systém bezpečný před nechtěnými změnami systémových nastavení nebo nepříjemnostmi typu trojských koní. Aby to platilo i o vašem systému, přihlašujte se jako superuživatel pouze pokud je to nezbytně nutné.

3.2.1. Přístupová práva souborů

V zásadě má každý soubor linuxového systému vlastníka a vlastnickou skupinu. Jak vlastníkům, členům vlastnických skupin, tak i všem ostatním lze povolit práva ke čtení, zápisu a vykonání souboru.

Skupinu lze v tomto případě definovat jako skupinu uživatelů, kteří mají společná práva. Například skupina pracující na projektu project3. Každý uživatel linuxového systému je členem alespoň jedné skupiny, obvykle users. V systému můžete mít mnoho různých skupin, ale zařadit vás do nich může pouze uživatel root. Do kterých skupin patříte, zjistíte příkazem groups.

Přístupová práva souborů

Organizace přístupových práv se liší u souborů a u adresářů. Informace o přístupových právech lze zobrazit příkazem ls -l. Výstup může vypadat například takto:

Příklad 3.1. Výstup příkazu ls -l zobrazující přístupová práva

-rw-r----- 1 tux project3 14197 2005-09-23 15:03 Roadmap

Podle údaje ve třetím sloupci patří soubor uživateli tux. Přiřazen je do skupiny project3. Abychom zjistili přístupová práva souboru Roadmap, musíme podrobněji prozkoumat první sloupec.

-

rw-

r--

---

Typ

Práva uživatele

Práva skupiny

Práva ostatních

První položka udává typ souboru. Pomlčka () říká, že jde o soubor. V systému můžete narazit také na adresář (d), odkaz (l), blokové zařízení (b) nebo znakové zařízení (c).

Další položky jsou seskupeny do skupin po třech. První trojice popisuje práva vlastníka, druhá trojice práva skupiny a třetí práva všech ostatních uživatelů.

V každé trojici první položka informuje o právech ke čtení (r), druhá o právech k zápisu (w) a třetí o právech k vykonání souboru (x). Jestliže je na daném místě místo písmene pomlčka (), není příslušné právo uděleno.

V našem případě má vlastník (tux) souboru Roadmap právo ke čtení (r) a zápisu (w), ale již ne k vykonání (x). Členové vlastnické skupiny project3 mohou soubor pouze číst. Ostatní uživatelé nemají k souboru žádný přístup. Pokud byste chtěli přístupová práva rozšířit, můžete použít ACL (Access Control Lists), viz 3.2.6 – „ACL (Access Control Lists)“.

Přístupová práva adresářů

Adresář je označen ve výstupu příkazu ls jako d. Význam přístupových práv u adresářů je trošku odlišný než u souborů.

Příklad 3.2. Výstup příkazu ls -l zobrazující přístupová práva adresáře

drwxrwxr-x 1 tux project3 35 Jun 21 15:15  ProjectData

Ve výše uvedeném příkladě jsou vlastník (tux) a vlastnická skupina (project3) adresáře ProjectData zřejmí. Práva ke čtení (r) umožňují v případě adresáře zobrazení jeho obsahu, tj. výpis jmen a vlastností jednotlivých souborů, ale již ne obsahu souborů. Práva k zápisu (w) umožňují vytvoření nového souboru v adresáři. Práva k vykonání (x) umožňují do adresáře vstoupit. Výše uvedený příklad tedy znamená, že uživatel tux stejně jako členové skupiny project3 mohou vstoupit do adresáře ProjectData (x), prohlížet si jeho obsah (r) a vytvářet zde nové soubory (w). Ostatní uživatelé mají trošku méně práv, mohou do adresáře vstoupit (x) a zjistit jeho obsah (r), ale již zde nemají právo vytvářet soubory (w).

3.2.2. Změna přístupových práv souborů

Změna přístupových práv

Přístupová práva může změnit vlastník souboru a samozřejmě také root příkazem chmod s vhodnými parametry. Parametry se řadí do několika skupin.

  1. uživatelské

    • u (user) – vlastník souboru

    • g (group) – vlastnická skupina

    • o (others) –  ostatní uživatelé (bez udání parametrů se změna aplikuje na všechny kategorie)

  2. znak pro smazání (), nastavení (=) nebo přidání (+)

  3. zkratky

    • r – čtení (read)

    • w – zápis (write)

    • x – vykonání (execute)

  4. jméno souboru nebo jména oddělená mezerou

Například pokud se uživatel tux z našeho příkladu rozhodne dát práva k zápisu (w) do adresáře ProjectData, i ostatním uživatelům (o), musí zadat příkaz chmod o+w ProjectData.

Pokud by však chtěl naopak všem mimo sebe práva k zápisu odebrat, napíše chmod go-w ProjectData. Všem uživatelům zakáže zápis příkazem chmod -w ProjectData. Po vykonání tohoto příkazu nebude mít právo vytvářet v adresáři nové soubory ani sám jeho vlastník.

Změna vlastníka

Další důležité příkazy v systému přístupových práv jsou chown (change owner) a chgrp (change group). Příkazem chown lze převést vlastnictví na jiného uživatele. Tuto operaci může provést pouze uživatel root.

Předpokládejme, že soubor Roadmap by již neměl patřit uživateli tux, ale vlastníkem by měl být geeko. Správce systému root tedy zadá příkaz chown geeko Roadmap.

Příkaz chgrp mění vlastnickou skupinu. Vlastník souboru musí být současně členem skupiny. V tomto případě tux může změnit vlastnickou skupinu souboru ProjectData na project4 příkazem chgrp project4 ProjectData, pouze pokud je členem i této skupiny.

3.2.3. Nastavení setuid bitu

Za určitých okolností jsou přístupová práva příliš omezující. Proto Linux umožňuje změnu identity uživatele či skupiny pro určitou akci. Například program passwd vyžaduje superuživatelská práva pro přístup do souboru /etc/passwd. Tento soubor totiž obsahuje důležité informace, jako domovské adresáře uživatelů a ID uživatelů a skupin. Povolit běžným uživatelům přístup k tomuto souboru by bylo nebezpečné. Možným řešením je mechanizmus setuid. setuid (set user ID) je speciální atribut souboru, který přikazuje systému, aby soubor spustil pod ID určitého uživatele. Například v případě příkazu passwd:

-rwsr-xr-x  1 root shadow 80036 2004-10-02 11:08 /usr/bin/passwd

Písmeno s značí, že byl pro uživatele nastaven setuid bit, tzn. všichni uživatelé, kteří příkaz passwd spustí, tak učiní pod uživatelem root.

3.2.4. Nastavení setgid bitu

Zatímco setuid se týká uživatelů, setgid poskytuje podobnou funkcionalitu pro skupiny. Program s nastaveným setgid se spouští vždy pod ID skupiny, pod kterou byl uložen. Pokud má setgid nastaven adresář, jsou všechny v něm nově vytvořené soubory a podadresáře přiřazeny skupině, které adresář patří. Například:

drwxrws--- 2 tux archive 48 Nov 19 17:12  backup

Písmeno s značí, že byl nastaven setgid bit. Vlastník a členové skupiny archive mohou k adresáři přistupovat. ID skupiny souborů zapsaných do tohoto adresáře bude archive.

3.2.5. Sticky Bit

K dispozici je také sticky bit. Chová se různě podle toho, zda jde o soubor nebo adresář. V případě souboru s nastaveným sticky bitem se soubor nahraje do RAM, aby nebylo nutné při každém jeho použití přistupovat na disk. Tento příznak se používal v dobách nepříliš rychlých disků a dnes je již používán velmi vzácně. V případě nastavení u adresáře zabraňuje mazání souborů ostatních uživatelů. Typickým příkladem jsou /tmp a /var/tmp:

drwxrwxrwt   2 root  root   1160 2002-11-19 17:15 /tmp

3.2.6. ACL (Access Control Lists)

Tradiční unixový systém přístupových práv lze rozšířit pomocí ACL (Access Control Lists). ACL umožňují přiřazovat zvláštní oprávnění jednotlivým uživatelům či skupinám, kteří nejsou vlastníky souboru.

Existenci rozšířených přístupových práv lze zjistit jednoduše příkazem ls -l:

-rw-r--r--+ 1 tux project3 14197 Jun 21  15:03 Roadmap

Roadmap je vlastněn uživatelem tux ze skupiny project3. tux má práva ke čtení i zápisu. Skupina i ostatní uživatelé mohou tento soubor číst. Jediný rozdíl představuje znak +.

Přesný výpis práv získáte příkazem getfacl Roadmap:

# file: Roadmap
# owner: tux
# group: project3
user::rw-
user:jane:rw-       effective: r--
group::r--
group:djungle:rw-   effective: r--
mask::r--
other::---

První tři řádky obsahují stejné informace jako v případě normálního ls -l, tj. jméno souboru, vlastníka a vlastnickou skupinu. Řádky 4 až 9 obsahují ACL položky. V našem případě je přístup k zápisu a čtení udělen také uživateli jane (řádky 4 a 5). ACL tedy rozšiřují konvenční systém přístupových práv o dalšího uživatele. Podobně jsou zde rozšířena i práva skupiny djungle (řádka 6). Položka masky na řádce 8 redukuje efektivní přístupová práva uživatele jane a skupiny djungle pouze na práva ke čtení. Ostatní uživatelé nebo skupiny nemají přístupová práva k souboru žádná (řádka 9).

Výše uvedené informace jsou jen velmi povrchní, pokud vás ACL zajímají více, prostudujte si kapitolu 5 – „ACLs v Linuxu (↑Referenční příručka).