ACL prakticky

Tam, kde tradiční práva v Linuxu přestávají stačit, je možno použít práva rozšířená (ACL – access control list). Obzvláště v systému s mnoha uživateli a různými rolemi se rozšířeným právům zpravidla nevyhneme.

Klasická práva

V klasických právech má soubor či adresář tyto skupiny oprávnění:

  • vlastník (uživatel)
  • skupina (skupina uživatelů)
  • ostatní

Každá tato skupina může mít nastavenu kombinaci těchto práv pro

  • čtení
  • zápis
  • spuštění (u adresáře přístup)

Dále může mít objekt přiřazeny speciální bity: setuid, setgid, sticky.

Příklad klasických práv: Vlastník je uživatel ondra, který má práva pro čtení i zápis, dále soubor mohou číst členové skupiny uzivatele. Ostatní nemají k obsahu souboru přístup.

[tomas@centos]$ ls -l soubor
-rw-r----- 1 ondra uzivatele 0 Nov 19 16:08 soubor

Nastavení těchto práv je v klasickém systému dosaženo příkazy chmod (změna práv) a chown (změna vlastníka, změnu může provést pouze root):

[root@centos]# chown ondra:uzivatele soubor
[root@centos]# chmod 640 soubor

Na jednoduché přiřazení práv se klasická práva výborně hodí, avšak selhávají i ve velmi jednoduchých případech, např: určit dva uživatele s právem pro zápis a čtení, dalšími vyjmenovanými uživateli s právem pouze pro čtení a ostatní bez přístupu. Tuto situaci řeší ACL velmi jednoduše.

Podpora ACL systémy souborů

Všechny hlavní systémy souborů v Linuxu (ext3, XFS, JFS, ReiserFS) ACL zvládají. U souborového systému ext3 je potřeba nastavit parametry mountu, což lze provést buď v /etc/fstab, nebo utilitkou tune2fs.

[root@centos]# tune2fs -o acl /dev/sdxy

A remountovat (znovu připojit) oddíl: mount / -o remount.

Pro správu rozšířených práv jsou určeny příkazy setfacl a getfacl z balíku acl.

Rozšířená práva

Přidávají ke klasickým právům vlastníka a skupiny zejména práva dalších uživatelů, skupin a také výchozí práva (pro adresáře). Dále je možné nastavit masku práv.

ACL záznamy se přidávají příkazem setfacl s parametrem -m. Záznamy mají tvar user:"jmeno uzivatele":"prava". Je možné použít i zkrácený tvar, místo user lze použít u, místo group stačí g atd. Záznamy bez uživatele nebo skupiny se zadávají ve tvaru mask:"práva".

Práva se zadávají ve tvaru rwx (jakákoliv libovolná kombinace práv pro čtení, zápis a spouštění). „Prázdná“ práva se zadávají ve tvaru ---.

Příkaz getfacl na soubor použitý v předchozím příkladu vypíše:

[root@centos]# getfacl soubor
# file: soubor
# owner: ondra
# group: uzivatele
user::rw-
group::r--
other::---

Zatím nic nového. Soubor vlastní uživatel ondra s právy rw, skupina uzivatele s právem jen pro čtení (r) a ostatní bez práv. Tedy přesně tak, jak bylo nastaveno pomocí klasických práv.

Práva uživatele

Nyní budeme požadovat, aby měl do daného souboru přístup pro zápis též uživatel milos:

[root@centos]# setfacl -m user:milos:rw soubor
[root@centos]# getfacl soubor
# file: soubor
# owner: ondra
# group: uzivatele
user::rw-
user:milos:rw-
group::r--
mask::rw-
other::---

Ve výpisu přibyl jednak přidaný záznam pro uživatele milos a také maska. Výpis přes ls -l soubor v tuto chvíli zobrazuje nepřesné informace o právech a znakem ‚+‘ informuje o použití rozšířených práv:

[root@centos]# ls -l
-rw-rw----+ 1 ondra uzivatele    0 Nov 19 16:08 soubor

Maska

Maska je filtr práv, princip je jasný z příkladu:

Uživatelská práva user:simona:r-x r-x
Maska mask::rw- rw-
Skutečná práva Simony r--

Uživatel simona nemůže soubor spouštět i přes to, že má přiřazeno právo ke spouštění. Nastavená maska práv jí to ruší.

O omezení práv (resp. o efektivních – skutečných – právech) z důvodu masky informuje i výpis getfacl, např:

user::r-x                      #effective:r--

Maska se v praxi příliš nepoužívá. Obvykle se tedy nastavuje na rwx.

Práva skupiny

Podobně jako právo pro uživatele můžeme přidat práva pro skupinu. Chceme, aby do souboru mohli zapisovat též uživatelé ve skupině kamaradi:

[root@centos]# setfacl -m group:kamaradi:rw soubor
getfacl soubor
# file: soubor
# owner: ondra
# group: uzivatele
user::rw-
user:milos:rw-
group::r--
group:kamaradi:rw
mask::rw
other::---

Výchozí práva

Jsou přiřazena k adresáři a sama o sobě neřídí přístup. Jejich smysl je v přiřazení práv k souborům a dalším podadresářům.

S výchozími právy je systémem zacházeno dvojím způsobem:

  • Podadresář zdědí výchozí práva z rodičovského adresáře a též je použije jako svá přístupová práva.
  • Soubor vytvořený v adresáři s výchozími právy je pouze zdědí jako svá přístupová práva.

Výchozí ACL záznamy se přidávají příkazem setfacl s parametry -d -m, za nimiž následuje již známý zápis práv.

Příklad: máme adresář, do kterého chceme udělit přístup uživatelům ve skupině kamaradi, kteří tam budou vytvářet soubory tak, aby je ostatní uživatelé v této skupině mohli měnit. Dále požadujeme, aby další uživatelé ve skupině uzivatele měli možnost tyto soubory číst. Ostatní nebudou mít přístup.

Vytvoření adresáře, přiřazení práv pro skupinu kamaradi a přidání výchozích práv téže skupině.

[root@centos]# mkdir Spolecny
[root@centos]# setfacl -m group:kamaradi:rwx Spolecny
[root@centos]# setfacl -d -m group:kamaradi:rwx Spolecny

Dále přidáme práva pro čtení a odpovídající výchozí záznam pro skupinu uzivatele:

[root@centos]# setfacl -m group:uzivatele:rx Spolecny
[root@centos]# setfacl -d -m group:uzivatele:rx Spolecny

A nakonec je třeba upravit práva pro ostatní.

[root@centos]# setfacl -m other:--- Spolecny
[root@centos]# setfacl -d -m other:--- Spolecny

Práva adresáře po těchto úpravách vypadají takto:

[root@centos]# getfacl Spolecny/
# file: Spolecny
# owner: root
# group: root
user::rwx
group::r-x
group:kamaradi:rwx
group:uzivatele:r-x
mask::rwx
other::---
default:user::rwx
default:group::r-x
default:group:kamaradi:rwx
default:group:uzivatele:r-x
default:mask::rwx
default:other::---

Soubor vytvořený v adresáři Spolecny uživatelem milos, který je ve skupině kamaradi, bude pak mít práva:

[root@centos]# su milos
[milos@centos]$ touch milosuv_soubor
[milos@centos]$ getfacl milosuv_soubor
# file: milosuv_soubor
# owner: milos
# group: milos
user::rw-
group::r-x                      #effective:r--
group:kamaradi:rwx              #effective:rw-
group:uzivatele:r-x             #effective:r--
mask::rw-
other::---

K tomuto souboru jsou nastavena práva tak, jak bylo v zadání s tím, že došlo k omezení práv na rw místo očekávaného rwx. Toto je způsobeno nastavením umask v systému (více viz man umask). Soubory se standardně vytvářejí jako nespustitelné. Pro nastavení práv spouštění lze použít třeba chmod u+x,g+x milosuv_soubor. Nebo opět pomocí setfacl.

Nově vytvořený podadresář pak má práva:

[milos@centos]$ mkdir Milosuv_Adresar
[milos@centos]$ getfacl Milosuv_Adresar/
# file: Milosuv_Adresar
# owner: milos
# group: milos
user::rwx
group::r-x
group:kamaradi:rwx
group:uzivatele:r-x
mask::rwx
other::---
default:user::rwx
default:group::r-x
default:group:kamaradi:rwx
default:group:uzivatele:r-x
default:mask::rwx
default:other::---

Nově vytvořený adresář zdědil jak přístupová práva, tak i výchozí záznamy.

Vyšlo též na abclinuxu.cz.

Příspěvek byl publikován v rubrice ACL, CentOS, Linux. Můžete si uložit jeho odkaz mezi své oblíbené záložky.