Před nějakým časem jsem psal o ACL na Linuxu (to už je fakt 13 let?). Dneska si ukážeme o něco málo jiná ACL na FreeBSD.

ACL (Access Control List) jsou přirozeným rozšířením standardních práv k souborů v UNIXu. Zatímco Linux používá práva vycházející z POSIX, ve FreeBSD se rozhodli jít cestou bohatších NFSv4 ACL.

Tento článek určitě nemá za cíl kompletně vysvětlit veškerá zákoutí NFS práv, jde spíše jen o rychlé uvedení pro adminy, kteří znají linuxová práva a s NFS ACL mohou z počátku zápasit. Pro úplné začátečníky doporučuju nejprve přečíst původní článek o ACL na Linuxu, protože dnes jej budeme jen pozměňovat pro prostředí FreeBSD.

Ve FreeBSD jsou NFSv4 ACL ve výchozím nastavení zapnuta pro ZFS. Pro UFS2 je nutné nastavit -o nfsv4acls v mount nebo fstab.

Nejprve si zobrazíme stávající práva pomocí příkazu getfacl:

getfacl /tank/data/file 

# file: /tank/data/file
# owner: tomas
# group: tomas
            owner@:rw-p--aARWcCos:-------:allow
            group@:r-----a-R-c--s:-------:allow
         everyone@:r-----a-R-c--s:-------:allow

Nic převratného, vypadá to skoro stejně jako na linuxu. Vlastník, skupina, výchozí UNIX práva.

Přidáme práva pro dalšího uživatele:

setfacl -m user:pavel:rwx:allow /tank/data/file
# nebo
setfacl -m user:pavel:modify_set:allow /tank/data/file

getfacl /tank/data/file

# file: /tank/data/file
# owner: tomas
# group: tomas
        user:pavel:rwx-----------:-------:allow
            owner@:rw-p--aARWcCos:-------:allow
            group@:r-----a-R-c--s:-------:allow
         everyone@:r-----a-R-c--s:-------:allow

Argumenty pro setfacl jsou dost podobné jako v linuxu. Místo práv rwx jsou lepší souhrnná práva modify_set.

Asi největší změnou jsou výchozí (default) práva. V linuxu se zapisují pomocí setfacl -d -m ..., ale na NFSv4 výchozí práva v tomto smyslu neexistují.

Tady se dělá jemnější dědění práv. Pokud tedy budu chtít přidat adresáři práva, která potom mají sdědit všechny v tomto adresíři vytvořené soubory a podadresáře, zadám speciální inheritance práva:

setfacl -m user:pavel:rwx:fd:allow file

getfacl file
# file: file
# owner: tomas
# group: tomas
        user:pavel:rwx-----------:fd-----:allow
        user:tomas:rwx-----------:fd-----:allow
            owner@:rwxp--aARWcCos:-------:allow
            group@:r-x---a-R-c--s:-------:allow
         everyone@:r-x---a-R-c--s:-------:allow

Inheritance fd znamená, že toto právo sdědí jak soubory, tak adresáře. Všechny flagy naleznete v dokumentaci.

A to je vlastně vše. Parametr -d zde není, dědění si nastavíme stejně jako kterákoliv jiná práva. Toto je vlastně všechno, co od ACL očekávám a co jsem od toho roku 2008 potřeboval. Nastavit default práva ke sdíleným adresářům pro vybrané uživatele. Tady se ještě rozlišuje allow nebo deny, je tedy možné vybranému uživateli něco odepřít.