Aneb když běžná práva nestačí.
ACL práva nastupují na scénu pokud potřebujete vyřešit práva, ale standardní metody pomocí vlastníka, skupiny a ostatních už na to nestačí. ACLka fungují téměř napříč politickým spektrem, takže jejich podpora je skoro ve všech (né-li ve všech) UNIXech resp. filesystémech.
Pomocí ACL práv se ke standardním právům přidají práva pro další uživatele nebo skupiny a také maska. Maska určuje maximální možná práva, která může dostat uživatel nebo skupina definovaná v ACL. Maska se nevztahuje na vlastníka. Změnou masky souboru můžete naráz všem definovaným ALC uživatelům a skupinám zatrhnout všechny přístupy.
Pomocí getfacl soubor vypíšete práva na soubor. Jak můžete vidět na příkladu, soubor jsem vytvořil pod uživatelem root, ostatní mají možnost pouze číst.
root@demo-141 # getfacl soubor # file: soubor # owner: root # group: other user::rw- group::r-- #effective:r-- mask:r-- other:r--
Teď nastavím uživateli uzivatel práva pro čtení a zápis.
root@demo-141 # setfacl -m user:uzivatel:6 soubor root@demo-141 # getfacl soubor # file: soubor # owner: root # group: other user::rw- user:uzivatel:rw- #effective:r-- group::r-- #effective:r-- mask:r-- other:r--
Nastavení proběhlo, ale efektivní práva jsou stále jen pro čtení a to z důvodu nastavené masky. Ponastavíme tedy masku na rw-.
root@demo-141 # setfacl -m m:6 soubor root@demo-141 # getfacl soubor # file: soubor # owner: root # group: other user::rw- user:uzivatel:rw- #effective:rw- group::r-- #effective:r-- mask:rw- other:r--
Tak a teď je vidět, že efektivní práva jsou rw-, tj. je možný i zápis, a to vše bez toho, aby uzivatel soubor vlastnil, nebo měl přes svou skupinu práva na zápis.
Jak poznám, že je na souboru použito ACL?
Z dlouhé výpisu tj. příkaz ls -l.
root@demo-141 # ls -l -rw-r--r--+ 1 root other 19 Feb 23 20:34 soubor
Koncové + značí použití ACL práv.
Jak smazat nastavené ACL?
Použitím příkazu setfacl -d ACL_zaznam soubor
root@demo-141 # getfacl soubor ..... user:uzivatel:rw- #effective:rw- user:user:rw- #effective:rw- .....
Takže uživatel s loginem user má aktuálně přidělená práva čtení a zápisu. Příkazem
setfacl -d u:user soubor
mu všechna přidělená práva odstraním a uživatel přestane existovat v ACL záznamu.
Nastavení všech práv najednou.
Pokud chcete nastavit práva souboru pomocí jednoho příkazu, je to možné...
root@demo-141 # setfacl -s user::r--,group::---,other:---,mask:rw-,user:uzivatel:rw- file
Je to trochu tasemnice, ale celkem jasná. Pozor na zdvojené dvojtečky. Výsledek:
root@demo-141 # getfacl file # file: file # owner: root # group: other user::r-- user:uzivatel:rw- #effective:rw- group::--- #effective:--- mask:rw- other:---
Ke stejnému výsledku můžeme také dojít číselným nastavením práv.
setfacl -s user::4,group::0,other:0,mask:6,user:uzivatel:6 file
Přenesení práv z jednoho souboru na druhý:
Přečtená práva přes | přeneseme na vstup setfacl a nastavíme na soubor s názvem file.
root@demo-141 # getfacl soubor | setfacl -f - file
Pokud chcete práva nejdříve uložit do souboru a pak tento soubor zvolit jako zdroj, není problém.
Nejdříve přesměrujeme do souboru nastavená práva:
getfacl soubor > soubor_prav
A tyto pak aplikujeme na vybrané soubory:
root@demo-141 # setfacl -f soubor_prav soubor soubor1 soubor2
Závěr:
Na Solarisu plně funkční, u jiných systémů je možné, že bude nutné zapnout podporu ACL při mountování filesystemu. Pokud to neuděláte, soubory budou mít pouze práva, která mají standardně a také se tak budou chovat...