Jak na FreeBSD NFS4 ACL
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.