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é.
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.
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)“.
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).
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.
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)
znak pro smazání (–), nastavení
(=) nebo přidání (+)
zkratky
r – čtení
(read)
w – zápis
(write)
x – vykonání
(execute)
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.
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.
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.
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.
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
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).