Udostępnij wszystkie nowe pliki w katalogu grupie


131

Załóżmy, że mam dwóch użytkowników Alice i Bob oraz grupę GROUPNAME i folder foo, obaj użytkownicy są członkami GROUPNAME (używają Linuksa i ext3).

Gdybym zapisać jako użytkownika Alice plik pod foo, uprawnienia są: -rw-r--r-- Alice Alice. Czy można jednak osiągnąć, że każdy plik zapisany w jakimś podkatalogu fooma uprawnienia -rwxrwx--- Alice GROUPNAME(np. Właściciel Alice, grupa GROUPNAME)?


Odpowiedzi:


91

Można kontrolować przypisane bity uprawnień z umask, a grupa poprzez katalog setgid do 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

Zauważ, że musisz zrobić chgrp/ chmoddla każdego podkatalogu; nie propaguje się automatycznie (tzn. ani istniejące, ani później utworzone katalogi w katalogu setgid nie będą ustawione na setgid , chociaż ten drugi będzie w grupie GROUPNAME).

Należy również pamiętać, że umaskjest to atrybut procesu i dotyczy wszystkich plików utworzonych przez ten proces i jego elementy podrzędne (które dziedziczą w danym momencie umaskefekt nadrzędny fork()). Użytkownicy mogą być zmuszeni to ustawić ~/.profilei mogą uważać na rzeczy niezwiązane z katalogiem, które wymagają różnych uprawnień. moduły mogą być przydatne, jeśli potrzebujesz różnych ustawień podczas wykonywania różnych czynności.

Możesz kontrolować rzeczy nieco lepiej, jeśli możesz używać list ACL POSIX; powinno być możliwe określenie zarówno maski uprawnień, jak i grupy oraz umożliwienie ich rozsądnej propagacji. Obsługa list ACL POSIX jest jednak nieco zmienna.


6
W podkatalogach utworzonych po ustawieniu setgid w katalogu nadrzędnym setgid zostanie ustawiony automatycznie.
Arrowmaster

2
@Arrowmaster: Być może w niektórych systemach, ale nie we wszystkich; Testowałem na OSX i nie propaguje, przynajmniej dla użytkownika innego niż root.
geekozaur

2
W przypadku Debiana (i zakładam, że większość innych dystrybucji Linuksa) zarówno setgid, jak i nazwa grupy są rozpowszechniane.
Arrowmaster

3
W OS X bit setgid w katalogu jest po prostu ignorowany; nowe pliki i katalogi zawsze otrzymują grupę zawierającą katalog.
John Flatness,

Czy jest również możliwe, że pliki skopiowane lub przeniesione do foo (przy użyciu cp odpowiednio. Mv) automatycznie uzyskują pożądane uprawnienia ( -rwxrwx--- A G)?
student

106

Jeśli to możliwe, użyj list kontroli dostępu (ACL) .

W systemie Linux upewnij się, że używany system plików obsługuje listy ACL (większość systemów plików unix obsługuje). Może być konieczna zmiana opcji montowania, aby włączyć listy ACL: w przypadku ext2 / ext3 / ext4 należy acljawnie określić opcję montowania, więc wpis /etc/fstabpowinien wyglądać tak /dev/sda1 / ext4 errors=remount-ro,acl 0 1. Uruchom, mount -o remount,acl /aby aktywować listy ACL bez ponownego uruchamiania. Zainstaluj także narzędzia wiersza polecenia ACL getfacli setfaclzazwyczaj dostarczane w pakiecie o nazwie acl.

Teraz, gdy konfiguracja jednorazowa się zakończyła, zmień listę ACL katalogu, aby nadać grupie uprawnienia do zapisu i aby uprawnienia te były dziedziczone przez nowo utworzone pliki. W systemie Linux:

setfacl -d -m group:GROUPNAME:rwx /path/to/directory
setfacl -m group:GROUPNAME:rwx /path/to/directory

Jeśli ACL nie są możliwe, zrobić katalog posiadanych przez Grupę GROUPNAME, i ustawić jego uprawnienia do 2775 lub 2770: chmod g+rwxs /path/to/directory. sTutaj oznacza setgid trochę; w przypadku katalogu oznacza to, że pliki utworzone w tym katalogu będą należeć do grupy, która jest właścicielem katalogu.

Musisz również ustawić umask Alice i Boba, aby wszystkie ich pliki były domyślnie zapisywane w grupie. Domyślną umaską w większości systemów jest 022, co oznacza, że ​​pliki mogą mieć wszystkie uprawnienia oprócz zapisu według grupy i innych. Zmień to na 002, co oznacza, że ​​zabronisz tylko uprawnień do zapisu przez inne osoby. Zazwyczaj umieszczasz to ustawienie w ~/.profile:

umask 002    # or 007 to have files not readable by others

6
+1 - Bardzo dokładna odpowiedź. Nigdy nie wiedziałem, że można ponownie zamontować / w locie. Dobrze wiedzieć.
boehj

1
Ta komenda setfacl -d nie działa dla mnie, ponieważ pliki zawarte w tym katalogu mają maskę r, która neguje jakiekolwiek uprawnienia do zapisu. Chciałbym trochę pomocy. Zobacz unix.stackexchange.com/questions/71743/…
Ben McCann

2
@its_me P1: Wyświetlam mountpolecenie z remountopcją, więc nie używa fstab. Podwójne acloznacza, że ​​system plików został już zamontowany z aclopcją i jest nieszkodliwy. tak na marginesie, acl jest to domyślne dla ext4 w ostatnich jądrach (łatka była jeszcze całkiem nowa, kiedy pisałem tę odpowiedź). Q2: Możesz uruchamiać polecenia w dowolnej kolejności.
Gilles

1
@its_me Tak, twoje zrozumienie jest prawidłowe, po prostu nie ma znaczenia, w jakiej kolejności dodajesz wpisy
Gilles

8
powinieneś poprawić odpowiedź, a następnie użyć GROUPNAMEzamiast G, aby było bardziej jasne
knocte

24

To pytanie jest dobre dla Linuksa acl. Ponieważ nie podajesz swojego systemu operacyjnego, zakładam, że Linux jest następujący. Oto przykładowa sesja.

Nie znam naprawdę dobrego aclsamouczka, ale możesz zrobić gorzej niż http://www.vanemery.com/Linux/ACL/linux-acl.html

Zauważ, że domyślny aclzachowuje się jak lokalny umask. Ponieważ przynajmniej w Linuksie umasks są stosowane globalnie, jest to jedyny znany mi sposób uzyskania efektu lokalnego umask. Z jakiegoś powodu jest to mało znana funkcja. Sieć jest zaśmiecona ludźmi pytającymi o lokalne obejście umask, ale prawie nikt nie myśli o użyciu acl.

Pamiętaj również, że musisz zamontować partycję, w której pracujesz, z aclobsługą, np.

/dev/mapper/debian-acl /mnt/acl        ext3    defaults,acl        0       2

Sesja następuje:

/mnt/acl$ mkdir foo
/mnt/acl$ getfacl foo
# file: foo
# owner: faheem
# group: faheem
user::rwx
group::r-x
other::r-x

Ustaw grupę fooby staffi ustaw acl grupy i użytkownika foona 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

Ustaw także domyślne wartości acls użytkownika i grupy rwx. Określa uprawnienia, które dziedziczą pliki i katalogi foo. Tak więc wszystkie pliki i katalogi utworzone w systemie foo będą miały uprawnienia grupowe 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::---

Teraz utwórz niektóre pliki foojako użytkownicy faheemi john.

/mnt/acl$ cd foo
/mnt/acl/foo$ touch bar

# switch to user john for this next command.

/mnt/acl/foo$ touch baz

Lista plików. Zauważ, że zarówno pliki będące własnością, jak faheemi pliki będące własnością, johnsą tworzone z uprawnieniami grupowymi 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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.