Přístupová práva a ACL

Správa linuxového serveru: Přístupová práva a ACL

Toto je poslední díl seriálu o správě linuxového serveru. Zatímco klasická unixová přístupová práva zná každý správce, o ACL a speciálních atributech už to tak obecně neplatí. Chcete vědět více? Čtěte dál.

Unixová přístupová práva

Standardní unixová přístupová práva asi velmi dobře znáte. Uživatelskupina a ostatní představují tři stěžejní subjekty, kterým se přidělují tři základní práva – právo číst (read), psát (write) a spouštět (execute). Chcete-li v unixových systémech spustit soubor obsahující spustitelný kód (binárka, shellový skript apod.), potřebujete souboru přidělit právo na spuštění.

V případě souborů je jasné, co jednotlivá práva povolují. V případě adresářů to už tak jasné být nemusí, nicméně v unixových systémech byste o adresáři měli uvažovat jako o speciálním typu souboru (v Unixech platí známé pravidlo vše je soubor). Pak už není těžké odvodit, co jednotlivá práva realizují:

Aby to nebylo zase úplně jednoduché, existují u souborů i adresářů ještě tři speciální práva, Set UID, Set GID a sticky bit. SUID se užívá hlavně u binárek. Ty běží za normálních okolností s právy uživatele, který je spustil. Některé nástroje ale potřebují rootovská práva pro provedení určitých operací, a k tomu slouží SUID a SGID práva. SUID právo spustí daný program s právy jeho vlastníka, což je obvykle root. SGID právo spustí daný program s právy jeho skupiny. Co je velmi důležité zmínit – chyba v programech s těmito právy může vést k získání práv roota útočníkem, proto je třeba SUID/SGID binárky pečlivě hlídat a aktualizovat.

U adresářů má SGID bit specifický význam – nastavuje skupinu u všech souborů a adresářů vytvořených v tomto adresáři.

Sticky bit se dříve používal u binárek, kde signalizoval operačnímu systému, aby binárku po jejím ukončení neodstraňoval z operační paměti tak rychle. V dnešní době slouží u adresářů typu /tmp, kde zajišťuje, že soubory vytvořené jedním uživatelem nemůže smazat jiný uživatel, i když má k danému adresáři právo zápisu.

K nastavení vlastnictví slouží nástroj chown, na změnu práv pak chmod. Nástroj chmod můžete používat s více než jedním způsobem zápisu práv. Často se používá číselná reprezentace v osmičkové soustavě, kde právo číst má hodnotu 4, právo zápisu hodnotu 2 a právo ke spuštění hodnotu 1. Sečtením těchto čísel dostanete příslušnou hodnotu dané kombinace práv:

debian:/tmp# touch test
debian:/tmp# chown nobody:nogroup test
debian:/tmp# chmod 640 test
debian:/tmp# ls -l test
-rw-r----- 1 nobody nogroup 0 16. zář 15.15 test

Hodnota 640 dává vlastníkovi (6) právo číst a zapisovat (ale už ne spouštět), skupině (4) dává právo číst (ale už ne zapisovat a spouštět) a ostatním (0) nedává žádné právo.

Nástroj chmod také podporuje symbolický zápis, kde u představuje uživatele, g skupinu, o ostatní a a všechny tři skupiny. Následuje operátor, který přidává (+), odebírá (-) nebo nastavuje (=) práva. A konečně přicházejí na řadu práva:

Například:

chmod u=rw,g+s,o-r soubor

Tento příkaz nastavuje pro uživatele práva číst a zapisovat, ale ne spouštět, pro skupinu přidává Set GID bit (ostatní práva pro skupinu zachovává) a ostatním uživatelům bere právo číst.

Atributy

Zajímavější jsou atributy, které lze vypisovat pomocí nástroje lsattr a nastavovat pomocí nástroje chattr. Těchto atributů je celá řada, ovšem musí je podporovat daný souborový systém. Nejzajímavější jsou dva, a sice append only (a) a immutable (i). První z nich povolí pouze zvětšení souboru, ale už ne modifikaci existujícího obsahu. Druhý pak zajistí, že soubor není možné jakkoliv měnit, upravovat nebo mazat, a to i když se jedná o uživatele root, pro kterého standardní práva nehrají roli. Přirozeně, máte-li roota, tak si příznak immutable můžete zrušit a soubor smazat. Přesto je dobré minimálně o těchto dvou atributech tušit. Nastavují se takto:

chattr +i immutable_file
chattr +a append_only_file

A ruší se takto:

chattr -i immutable_file
chattr -a append_only_file

Ostatní atributy najdete popsané v manuálové stránce nástroje chattr.

ACL v Linuxu

Časem můžete zjistit, že klasická unixová přístupová práva nejsou dost jemná pro váš způsob použití. Chcete-li třeba dát konkrétnímu uživateli možnost číst nebo zapisovat do souboru, který vlastní někdo jiný a který je zařazen ve skupině, jejímž členem daný konkrétní uživatel není a nemá být, nedává vám unixový model přístupových práv žádný nástroj, jak toho dosáhnout. Zde jasně narážíte na jeho omezení.

V Linuxu však existují již poměrně dlouho ACL (Access Control List), které nabízejí jemnější model specifikace přístupových práv. Tuto vlastnost musí podporovat souborový systém a musíte explicitně stanovit příslušný atribut (acl) v /etc/fstab:

/dev/sda1 / ext3 defaults,errors=remount-ro,acl 0 0

Tím zajistíte připojení daného souborového systému s acl, ale až po restartu počítače. Za běhu systému souborový systém přenastavit můžete, a to i bez nutnosti jej odpojit a následně připojit, takto:

mount -o remount,acl /

ACL je třeba nějakým způsobem nastavit. Nástroje k tomuto účelu naleznete v případě Debianu v balíčku acl:

aptitude install acl

Nástroj pro nastavení přístupových práv u souborů a adresářů se nazývá setfacl, nástroj pro vypsání stavu přístupových práv se jmenuje getfacl.

Základní syntaxe ACL vypadá takto: objekt:jméno:práva, kde objekt je user pro uživatele (nebo zkráceně u), group pro skupinu (nebo zkráceně g) a other pro ostatní (nebo zkráceně o). Jméno je jméno daného objektu (tedy daného uživatele nebo skupiny), v případě ostatních se (přirozeně) neuvádí. Práva představují klasickou trojici: číst (r), psát (w), spouštět (x).

Pro úpravu ACL se používá přepínač -m, pro mazání přepínač -x a pro vymazání všech ACL slouží přepínač -b.

Nejjednodušší použití představuje přidání sady práv nějakému uživateli nebo nějaké skupině:

debian:/home/staff# ls -l dokument.txt
-rw-r----- 1 michal staff 0 16. zář 15.12 dokument.txt
debian:/home/staff# setfacl -m u:honza:rw- dokument.txt
debian:/home/staff# getfacl dokument.txt
# file: dokument.txt
# owner: michal
# group: staff
user::rw-
user:honza:rw-
group::r--
mask::rw-
other::---

Není-li to z výpisu výše patrné, vězte, že ACL představuje rozšíření unixových práv. Unixová práva stále platí, ACL je pouze rozšiřuje. V příkladu výše tedy unixová práva stále umožňují členům skupiny staff číst daný soubor, vlastník (michal) má pak práva pro čtení a zápis, zatímco ostatní nemají žádná práva. V tomto příkladě byla pomocí ACL nastavena navíc práva uživateli honza, a to právo pro čtení a zápis do souboru dokument.txt.

Práva se dají samozřejmě nastavit i skupině:

debian:/home/staff# setfacl -m g:www-data:r-- dokument.txt
debian:/home/staff# getfacl dokument.txt
# file: dokument.txt
# owner: michal
# group: staff
user::rw-
group::r--
group:www-data:r--
mask::rw-
other::---

V tomto příkladu bylo nastaveno právo pro čtení skupině www-data k souboru dokument.txt.

Pokud budete chtít sdílet nějaké materiály v nějaké skupině, bývá vhodné k tomu vyhradit celý adresář. Pokud však nastavíte pouze práva k danému adresáři a někdo v něm vytvoří soubor nebo další adresář, jak se v rámci ACL zajistí, aby i tyto nově vytvořené soubory a adresáře byly přístupné dané skupině nebo uživateli s danými ACL právy? Pomocí výchozích práv, pro jejichž nastavení slouží prefix d:, takto:

debian:/home# mkdir projekt
debian:/home# setfacl -m d:g:vyvojari:r-- projekt
debian:/home# cd projekt
debian:/home/projekt# touch dokument.txt
debian:/home/projekt# getfacl dokument.txt 
# file: dokument.txt
# owner: root
# group: root
user::rw-
group::r-x                      #effective:r--
group:vyvojari:r--
other::---

Zde je patrné, že nově vytvořený soubor dokument.txt v adresáři s patřičně nastavenými výchozími ACL zahrnuje přidané právo pro čtení skupině vyvojari.

ACL toho samozřejmě umí ještě o něco více, nicméně toto jsou základy, které je vhodné ovládat. Na zbytek se podívejte do manuálových stránek nástroje setfacl.

Konec

Tímto dílem bych se s vámi rád rozloučil, jelikož další díl již nevyjde. Včetně tohoto vyšlo celkem 98 dílů seriálu o správě linuxového serveru během téměř tří let. Když jsem začal psát první díly, neměl jsem sebemenší představu, že dosáhnu takového čísla nebo že vydržím psát tak dlouho. Dovolte mi vám poděkovat za přízeň, dále za všechny přívětivé a pochvalné komentáře, které mi dodávaly energii a chuť, a také za všechna doplnění a upřesnění.

Povedlo se mi pokrýt řadu témat a doufám, že jsem základy správy linuxových serverů dostatečně osvětlil. Určitě přijdete na řadu témat, kterou jsem nepokryl, ale to k věci patří. Správa linuxového serveru je velice široké téma, o kterém se toho dá napsat mnoho.

V zásadě, vlastní studium dokumentace a provádění rešerší je něco, co ke správě systémů patří. Žádný správce neví všechno. Stejně tak k tomu patří experimentování, testování a ladění, tedy praxe. To jsou má doporučení, kam jít dál.

Někteří z vás se ptali a ptají na to, jestli by bylo možné získat celý seriál v nějakém rozumném celku k vytištění nebo k prohlížení na cestách. V tomto ohledu mám pro vás dobrou zprávu – připravujeme vydání seriálu v knižní podobě v edici CZ.NIC.

Tímto se s vámi loučím a přeji vám hodně štěstí a úspěchů (nejen) v oblasti správy linuxových serverů.