Předpokládejme, že mám dva uživatele Alice a Bob a skupinu GROUPNAME a složku foo
, oba uživatelé jsou členy GROUPNAME (používající Linux a ext3).
Pokud uložím jako uživatel Alice soubor pod foo
, jsou oprávnění: -rw-r--r-- Alice Alice
. Je však možné dosáhnout toho, aby každý soubor uložený v nějakém podadresáři foo
měl oprávnění -rwxrwx--- Alice GROUPNAME
(tj. majitel Alice, skupina GROUPNAME)?
Přiřazené bity oprávnění můžete ovládat pomocí umask
a skupiny nastavením adresáře setgid na GROUPNAME
.
$ umask 002 # allow group write; everyone must do this
$ chgrp GROUPNAME . # set directory group to GROUPNAME
$ chmod g+s . # files created in directory will be in group GROUPNAME
Všimněte si, že musíte provést chgrp
/chmod
pro každý podadresář; nešíří se automaticky (to znamená, že existující ani následně vytvořené adresáře v adresáři setgid budou setgid , i když tato bude ve skupině GROUPNAME
).
Také si všimněte, že umask
je atribut procesu a vztahuje se na všechny soubory vytvořené tímto procesem a jeho podřízenými (které zdědí umask
ve skutečnosti v jejich rodiči v fork()
time) . Uživatelé to možná budou muset nastavit v ~/.profile
A možná bude třeba dávat pozor na věci, které se netýkají vašeho adresáře a vyžadují různá oprávnění. moduly může být užitečné, pokud potřebujete různá nastavení, když děláte různé věci.
Můžete použít věci trochu lépe, pokud můžete používat POSIX ACL; mělo by být možné určit masku oprávnění i skupinu a nechat je rozumně se šířit. Podpora pro ACL POSIX je však poněkud proměnná.
Pokud je to možné, použijte seznamy řízení přístupu (ACL) .
V systému Linux se ujistěte, že používaný souborový systém podporuje ACL (většina unixových souborových systémů ano). Možná budete muset změnit možnosti připojení, abyste povolili ACL: s ext2/ext3/ext4 musíte explicitně specifikovat možnost acl
mount, takže položka v /etc/fstab
by mělo vypadat jako /dev/sda1 / ext4 errors=remount-ro,acl 0 1
. Spustit mount -o remount,acl /
pro aktivaci ACL bez restartu. Nainstalujte také nástroje příkazového řádku ACL getfacl
a setfacl
, obvykle poskytované v balíčku nazvaném acl
.
Nyní, když je jednorázové nastavení ukončeno, změňte ACL v adresáři, abyste skupině udělili oprávnění k zápisu a aby tato oprávnění zdědili nově vytvořené soubory. V systému Linux:
setfacl -d -m group:GROUPNAME:rwx /path/to/directory
setfacl -m group:GROUPNAME:rwx /path/to/directory
Pokud ACL nejsou možností, vytvořte adresář skupiny GROUPNAME
a nastavte jeho oprávnění na 2775 nebo 2770: chmod g+rwxs /path/to/directory
. s
zde znamená bit setgid; pro adresář to znamená, že soubory vytvořené v tomto adresáři patří do skupiny, která vlastní adresář.
Budete také muset nastavit mask Alice a Boba, aby všechny jejich soubory byly ve výchozím nastavení zapisovatelné do skupiny. Výchozí umask ve většině systémů je 022, což znamená, že soubory mohou mít všechna oprávnění kromě zápisu podle skupiny a dalších. Změňte to na 002, což znamená zakázat pouze písemné povolení. Toto nastavení byste obvykle vložili do svého ~/.profile
:
umask 002 # or 007 to have files not readable by others
Tato otázka je vhodná pro linux acl
. Protože svůj operační systém neuvádíte, předpokládám Linux v následujícím. Zde je příklad relace.
Nevím o opravdu dobrém tutoriálu acl
, ale můžete udělat horší než http://www.vanemery.com/Linux/ACL/linux-acl.html
Všimněte si, že výchozí acl
se chová jako místní umask. Protože alespoň v Linuxu jsou umasks aplikovány globálně, je to jediný způsob, jak vím, abych získal účinek lokálního umask. Z nějakého důvodu je to trochu známá funkce. Síť je plná lidí, kteří se ptají na přepsání lokálního umasku, ale zdá se, že téměř nikdo nepřemýšlí o použití acl
.
Rovněž je třeba připojit oddíl, ve kterém pracujete, s podporou acl
, např.
/dev/mapper/debian-acl /mnt/acl ext3 defaults,acl 0 2
Následuje relace:
/mnt/acl$ mkdir foo
/mnt/acl$ getfacl foo
# file: foo
# owner: faheem
# group: faheem
user::rwx
group::r-x
other::r-x
Nastavte skupinu foo
na staff
a nastavte acl skupiny a uživatele foo
na rwx
.
/mnt/acl$ chgrp staff foo
/mnt/acl$ setfacl -R -m u::rwx,g::rwx foo
/mnt/acl$ getfacl foo
# file: foo
# owner: faheem
# group: staff
user::rwx
group::rwx
other::r-x
Nastavte také výchozí acly uživatele a skupiny na rwx
. Toto definuje oprávnění, která soubory a adresáře dědí od foo
. Takže všechny soubory a adresáře vytvořené pod foo budou mít skupinová oprávnění rw
.
/mnt/acl$ setfacl -d --set u::rwx,g::rwx,o::- foo
/mnt/acl$ getfacl foo
# file: foo
# owner: faheem
# group: staff
user::rwx
group::rwx
other::r-x
default:user::rwx
default:group::rwx
default:other::---
Nyní vytvořte některé soubory v foo
jako uživatelé faheem
a john
.
/mnt/acl$ cd foo
/mnt/acl/foo$ touch bar
# switch to user john for this next command.
/mnt/acl/foo$ touch baz
Seznam souborů. Všimněte si, že jak soubory vlastněné faheem
, tak soubory vlastněné john
jsou vytvářeny s oprávněními skupiny rw
.
/mnt/acl/foo$ ls -la
total 3
drwxrwxr-x+ 2 faheem staff 1024 May 9 01:22 .
drwxr-xr-x 4 faheem faheem 1024 May 9 01:20 ..
-rw-rw---- 1 faheem faheem 0 May 9 01:20 bar
-rw-rw---- 1 john john 0 May 9 01:22 baz