[ Skip to the content ]

Institute of Formal and Applied Linguistics Wiki


[ Back to the navigation ]

Table of Contents

Přístupová práva k souborům pomocí ACL

ACL (access control list) je způsob, jak rozšířit přístupová práva. Pro každý soubor/adresář můžeme mít kromě těch klasických tří “skupin” (u, g, o) i seznam dalších uživatelů/skupin s jejich přístupovými právy. Důležité příkazy jsou setfacl a getfacl. Pěkný tutoriál je tady:

https://wiki.archlinux.org/index.php/Access_Control_Lists

V kostce:

Modelová situace: mám soubor “nejaky-soubor” s právy 600, tj. vlastník (já) může rw, ostatní nic:

$ ls -l nejaky-soubor 
-rw------- 1 janicek ufal_ext 0 2008-06-26 22:14 nejaky-soubor

Teď chci povolit jednomu dalšímu uživateli (ale ne celé skupině ufal_ext) čtení toho souboru, to udělám pomocí setfacl:

$ setfacl -m u:zeman:r nejaky-soubor

Přepínač “-m” znamená “modify”, v tomhle případě přidání další položky, je to uživatel (to je to “u:”) zeman a jeho práva. Když pak pustím na ten soubor ls -l, tak těsně za těmi devíti políčky, před počtem linků, sedí “+”. Tím dává ls na vědomí, že ten soubor má nějaký ACL a že to je tedy s právy komplikovanější.

$ ls -l nejaky-soubor
-rw-r-----+ 1 janicek ufal_ext 0 2008-06-26 22:14 nejaky-soubor

Pro lepší výpis práv musíme použít getfacl:

$ getfacl nejaky-soubor 
# file: nejaky-soubor
# owner: janicek
# group: ufal_ext
user::rw-
user:zeman:r--
group::---
mask::r--
other::---

Čtvrtý řádek (“mask”) říká, jaká nejlepší práva může kdokoliv v ACL (čili vyjma tradičních u, g, o) dostat, a ls -l pak ve výpisu uvádí právě tenhle údaj místo práv pro skupinu.

Čili kdybych chtěl povolit skupině ufal_ext přístup r-x k adresáři “en” v /net/data/conll/2007, tak by mělo stačit dát

$ setfacl -m g:ufal_ext:rx /net/data/conll/2007/en

a případně totéž vevnitř, jestli je to tam podobné.

Jak přidat rekurzivně právo "x" adresářům, ale ne souborům?

find -type d -exec chmod o+rx {} \;

Pokud bych chtěl přidat právo “x” na adresáře a právo “r” na adresáře i soubory skupině ufal_ext pomocí ACL:

find -type d -exec setfacl -m g:ufal_ext:rx {} \;
setfacl -R g:ufal_ext:r *

Jak odebrat rekurzivně právo zápisu pro kohokoli?

Revoking write access from all groups and all named users (using the effective rights mask):

setfacl -R -m m::rx .

Give all permissions to all ufal/ufal_ext users

This is the preferred way of giving all rights to “everyone”. It is more secure than simple “chmod a+rwx”, which also includes e.g. the “www-data” group (i.e. access from the web).

setfacl -m g:ufal:rwx,g:ufal_ext:rwx FILE

[ Back to the navigation ] [ Back to the content ]