Přístupová práva v Linuxu
Přístupová práva v Linuxu jsou klasická jednoduchá unixová oprávnění, která se aplikují na soubory a adresáře v tradičním souborovém systému UFS. Oprávnění jsou nastavována přímo a při jejich vyhodnocování se nepracuje s mechanismy dědění oprávnění z nadřízených adresářů (se specifickou výjimkou práva vstupu do adresáře). I přes jejich jednoduchost lze obvykle pomocí jednoduchých doplňujících možností dosáhnout požadovaného stavu. Přesto se v současné době často používají rozšířená oprávnění podle normy POSIX (viz ACL v Linuxu), která poskytují flexibilnější možnosti nastavení.
Obsah
Uživatelé a skupiny
Ve víceuživatelských unixových systémech je nutné od sebe jednotlivé uživatele oddělit a chránit jejich data a běžící procesy. Proto jsou v systému definováni uživatelé a skupiny. Při vyhodnocování oprávnění se používají číselné identifikátory UID (číslo uživatele) a GID (číslo skupiny), která se při výpisu převádějí na přihlašovací jména a názvy skupin.
Uživatelé
Každý uživatel unixového systému má svůj učet, který zahrnuje přihlašovací jméno, heslo a domácí adresář. Z historických důvodů jsou často uživatelská jména omezena na délku osmi znaků, avšak současné systémy (např. Linux) obvykle umožňují používat i delší přihlašovací jména, což může způsobovat drobné obtíže (například zkrácení na osm znaků ve výpisu příkazu last
nebo nemožnost přihlášení pomocí řádkového programu FTP obsaženého přímo v MS Windows).
Uživatelské účty jsou definovány v jednoduché databázi v podobě textového souboru /etc/passwd
, kde je na každém řádku uveden jeden účet. Jednotlivé položky každého účtu jsou odděleny dvojtečkou. Struktura záznamu je pevně dána takto:
prihlasovaci.jmeno:heslo (je-li uvedeno):UID:GID:Plné Jméno:/domaci/adresar:/implicitni/shell
- Přihlašovací jméno
- Přihlašovací jméno může obsahovat malá písmena ASCII tabulky a některé speciální znaky (obvykle je povolena pomlčka a tečka). Velká písmena by se neměla používat, protože způsobují potíže při doručování elektronické pošty, kde v adrese nezáleží na velikosti písmen. Délka je v konzervativním případě omezena na osm znaků, avšak v moderních systémech může být delší (typicky ve tvaru jmeno.prijmeni).
- Heslo
- Heslo bývalo v souboru uloženo dříve, dnes je na této pozici obvykle písmeno x, protože heslo je uschováno v souboru
/etc/shadow
(kvůli ochraně proti útoku hrubou silou na použitou jednosměrnou šifru).
- UID
- UID je číslo uživatele, které používá pro rozlišení uživatelů operační systém. Číslo 0 (nula) je vyhrazeno pro správce systému (root), pro kterého se oprávnění nekontrolují. Ostatní čísla jsou běžní uživatelé, kteří jsou si z pohledu systému rovni, přičemž čísla do 100 (resp. 500) jsou vyhrazena pro systémové účty (typicky různí démoni) a čísla nad 500 jsou určena pro běžné uživatele.
- GID
- GID je číslo primární skupiny uživatele. Uživatel musí být vždy členem alespoň jedné skupiny. Systémy, které vycházejí z řady System V zakládají pro každého uživatele stejnojmennou skupinu, jíž jsou jediným členem. Tento způsob nutí správce, aby založil vlastní skupinu, která by sdružovala (vybrané) uživatele (např. v linuxových systémech Fedora, Red Hat Enterprise Linux, CentOS). V systémech vycházejících z větve BSD jsou všichni nově založení uživatelé implicitně členy skupiny users (např. v linuxových distribucích Debian, Ubuntu). Jedno z uvedených chování lze obvykle v systému nastavit.
- Plné jméno
- Plné jméno je obvykle jméno a příjmení uživatele. Někdy se za čárky uvádí ještě kancelář, telefon do kanceláře a telefon domů. Plné jméno využívají některé programy (např. klient elektronické pošty, který ho implicitně používá pro jméno odesílatele). V souboru není uvedeno kódování, takže je nutné, aby případná písmena s diakritikou byla uvedena v kódování, které implicitně používá celý systém (dnes typicky UTF-8), případně se smířit s tím, že bude někdy špatně interpretováno (nutno vyzkoušet). Uživatel si může své plné uživatelské jméno měnit příkazem
chfn
.
- Domácí adresář
- Domácí adresář slouží pro uložení konfiguračních souborů (typicky začínají tečkou a jsou proto skryté a pro uložení uživatelských dat. Typicky jsou domácí adresáře umístěny v
/home/prihlasovaci.jmeno
, ale není to nezbytně nutné. Definici domácího adresáře používá například shell, který je schopen cestu doplnit při expanzi znaku tilda (~
). Běžné programy využívají spíše proměnnou prostředíHOME
, která je podle této položky nastavena při přihlášení uživatele (např. při ukládání uživatelských souborů).
- Implicitní shell
- Implicitní shell je interpret příkazů, který je spuštěn při přihlášení uživatele (nebo při spuštění emulace terminálu v grafickém prostředí), což je typicky
/bin/bash
. Uživatel si může změnit implicitní shell pomocí příkazuchsh
, avšak může vybírat pouze z těch, které jsou uvedeny v souboru/etc/shells
. Stejně tak systém při přihlášení nespustí shell, který v tomto souboru není uveden, což je bezpečnostní opatření. Shell může být též nějaký jiný program, který zajistí komunikaci s uživatelem (např. menu). Systémovým účtům se obvykle dávají jako shell programy, které nedělají nic, aby se na ně nemohl někdo přihlásit (např./sbin/nologin
, méně vhodně/bin/false
apod.).
Příklad části souboru /etc/passwd
(tři tečky naznačují vynechané řádky):
root:x:0:0:Admin - Opteron:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin ... rene.huzva:x:10727:10727:René Hužva:/home/rene.huzva:/bin/bash
Skupiny
Skupiny jsou vedeny v souboru /etc/groups
, hesla jsou podobně jako v předchozím případě obvykle umístěna v souboru /etc/gshadow
.
Primární a doplňující skupiny
Změna vlastníka a skupiny
Změnu vlastníka a skupiny může provádět pouze administrátor systému (uživatel root). Některé systémy dovolují za specifických podmínek provádět změnu vlastníka nebo skupiny i obyčejným uživatelům, avšak z bezpečnostních důvodů se tato možnost obvykle uživatelům neposkytuje.
Změna vlastníka (a skupiny) pomocí řádkového příkazu chown
:
chown huzva soubor.txt # změna vlastníka chown :skupina soubor.txt # zmena skupiny chown huzva:skupina soubor.txt # změna vlastníka i skupiny chown -R huzva adresar # rekurzivní změna na celý podadresář chown -R huzva:skupina adresar
Tři trojice
Tradiční unixová oprávnění jsou rozdělena do tří trojic (někdy se označují jako svatá trojice), i když ve skutečnosti jsou vlastně tyto trojice čtyři, protože se před ně předsazuje ještě trojice speciálních oprávnění (tzv. sticky, SUID a SGID bit), ale ty jsou předmětem jiného článku.
Každý soubor a adresář má oprávnění pro:
- vlastníka (tj. je to vlastník souboru nebo adresáře)
- skupinu (tj. není to vlastník, ale je členem uvedené skupiny)
- ostatní uživatele (tj. není to vlastní ani nepatří do výše uvedené skupiny)
přičemž každé oprávnění se skládá ze tří práv:
-
r
– čtení -
w
– zápis -
x
– spuštění souboru nebo vstup do adresáře
Z výše uvedených poznámek vyplývá, že přístupová práva se určují pouze podle nejkonkrétnější trojice, tj. pokud přistupuje k souboru jeho vlastník, pak jsou na něj aplikovaná práva pouze z první trojice. Pokud k souboru přistupuje někdo, kdo není jeho vlastník, ale patří do stejné skupiny jako soubor, pak je na něj uplatňována trojice oprávnění pro skupinu. Teprve tehdy, pokud k souboru nebo adresáři přistupuje uživatel, který není ani vlastník a ni nepatří do skupiny jako soubor, je na něj uplatněna poslední trojice oprávnění pro ostatní uživatele.
Změna oprávnění
chown 600 soubor.txt # nastavení čtení a zápisu majiteli, ostatním nic chown u-w soubor.txt # odebrání práva zápisu majiteli