it-swarm-eu.dev

Zpřístupněte všechny nové soubory v adresáři skupině

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)?

132
student

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á.

96
geekosaur

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
24
Faheem Mitha