Portál AbcLinuxu, 19. říjen 2019 03:48

ACL prakticky

11. 12. 2008 | Tomáš Crhonek
Články - 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.

Obsah

Klasická práva

link

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

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

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 750 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ů

link

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

link

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

link

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

link

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

link

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

link

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:

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.

Související články

OpenSSH - bezpečně a pohodlně
OpenSSH - více než jen Secure Shell
Seriál: Centrální správa účtů a Single Sign-On
Seriál: Moderní souborové systémy

Další články z této rubriky

V sobotu se uskuteční konference CryptoFest
Pozor na androidové aplikace
Silent Circle představil bezpečný smartphone Blackphone 2
Android je bezpečnější, řada hrozeb však stále přetrvává
Avast varuje před nebezpečnými aplikacemi v Google Play

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.