Pobieranie nowych plików w celu dziedziczenia uprawnień grupy w systemie Linux

87

Mam problem z uprawnieniami na serwerze z systemem Linux. Jestem przyzwyczajony do BSD. Gdy katalog jest własnością grupy, której właścicielem jest użytkownik, nie ma go na przykład w danych www, pliki w nim utworzone będą własnością tej grupy. Jest to ważne, ponieważ chcę, aby pliki były czytelne dla serwera WWW (którego nie będę uruchamiał jako root), ale aby użytkownik mógł nadal umieszczać nowe pliki w katalogu. Nie mogę umieścić użytkowników w danych www, ponieważ wtedy będą mogli czytać strony internetowe innych użytkowników.

Chcę, aby serwer WWW czytał wszystkie witryny, chcę, aby użytkownicy mogli zmieniać własne.

W tej chwili uprawnienia są ustawione w folderach ....

drwxr-x--- 3 john www-data 4096 Feb 17 21:27 john

Jest to standardowe zachowanie BSD dla uprawnień do pracy w ten sposób. Jak sprawić, by Linux to zrobił?

John Tate
źródło
2
Czy możesz używać list ACL?
slm

Odpowiedzi:

128

Brzmi to tak, jakbyś opisywał funkcjonalność bitu setgid, gdy gdy katalog, który go ustawił, zmusi wszelkie utworzone w nim nowe pliki, aby ich grupa była ustawiona na tę samą grupę, która jest ustawiona w katalogu nadrzędnym.

Przykład

$ whoami
saml

$ groups
saml wheel wireshark

skonfiguruj katalog z perms + własności

$ sudo mkdir --mode=u+rwx,g+rs,g-w,o-rwx somedir
$ sudo chown saml.apache somedir
$ ll -d somedir/
drwxr-s---. 2 saml apache 4096 Feb 17 20:10 somedir/

dotknij pliku jako saml w tym katalogu

$ whoami
saml

$ touch somedir/afile
$ ll somedir/afile 
-rw-rw-r--. 1 saml apache 0 Feb 17 20:11 somedir/afile

To da ci mniej więcej tyle, ile chcesz. Jeśli naprawdę chcesz dokładnie tego, co opisałeś, myślę, że musisz skorzystać z funkcji list kontroli dostępu, aby to uzyskać (ACL).

ACL

Jeśli chcesz uzyskać nieco większą kontrolę nad uprawnieniami do plików tworzonych w katalogu, somedirmożesz dodać następującą regułę ACL, aby ustawić domyślne uprawnienia w ten sposób.

przed

$ ll -d somedir
drwxr-s---. 2 saml apache 4096 Feb 17 20:46 somedir

ustawić uprawnienia

$ sudo setfacl -Rdm g:apache:rx somedir
$ ll -d somedir/
drwxr-s---+ 2 saml apache 4096 Feb 17 20:46 somedir/

Zwróć uwagę +na końcu, co oznacza, że ​​w tym katalogu zastosowano listy ACL.

$ getfacl somedir
# file: somedir
# owner: saml
# group: apache
# flags: -s-
user::rwx
group::r-x
other::---
default:user::rwx
default:group::r-x
default:group:apache:r-x
default:mask::r-x
default:other::---

po

$ touch somedir/afile
$ ll somedir/afile 
-rw-r-----+ 1 saml apache 0 Feb 17 21:27 somedir/afile
$ 

$ getfacl somedir/afile
# file: somedir/afile
# owner: saml
# group: apache
user::rw-
group::r-x              #effective:r--
group:apache:r-x        #effective:r--
mask::r--
other::---

Zwróć uwagę przy ustawieniu domyślnych uprawnień ( setfacl -Rdm), aby uprawnienia były r-xdomyślnie ( g:apache:rx) ( ). Wymusza to rwłączenie nowych bitów tylko dla nowych plików .

slm
źródło
To wydaje się zapewniać funkcjonalność, której chciałem, dzięki.
John Tate
To wydaje się również rozwiązać mój podobny problem. Jednak nie do końca rozumiem ostatnie zdanie: „Wymusza to na nowych plikach włączenie tylko bitu r”. Dlaczego uprawnienie x nie jest włączone? Czy istnieje sposób, aby włączyć to domyślnie?
yaobin
1
@yaobin Myślę, że to kwestia bezpieczeństwa, tak naprawdę nie chcesz domyślnie mieć pliku wykonywalnego
cdarken
To nie działa z unzip?
datasn.io
@ datasn.io - spójrz na stronę podręcznika użytkownika unzip. W szczególności -Xprzełącznik.
slm
37

TL: DR; aby nowe pliki dziedziczyły grupę folderu kontenerowego:

$ chmod g+s somefolder

Uwaga: wynika z zaakceptowanej odpowiedzi, jest to tylko fragment kodu.

alo Malbarez
źródło
3
setgid oznacza, że nowe pliki i foldery będą miały odpowiednią grupę, ale pamiętaj, że jeśli przeniesiesz pliki do drzewa, nie będzie mieć skonfigurowanego odpowiedniego właściciela. Podejście ACL sobie z tym radzi (ogólnie).
Chris Morgan
@ChrisMorgan, jak sobie z tym radzi? Rozwiązania z zaakceptowanej odpowiedzi nie zrobiły nic w przypadku przeniesionych plików w moim przypadku.
Dan M.
@DanM .: w trybach plików ustawiasz uprawnienia, które nie są dziedziczone; ale w przypadku list ACL ustawia się odziedziczone uprawnienia (chociaż dzieci mogą określić własne listy ACL, które je zastępują), sprawdzane w czasie wykonywania.
Chris Morgan
@ChrisMorgan tak. Jak to robisz? Rozwiązanie wykorzystujące odpowiedź ACL z formularza nie działa.
Dan M.
10

Jako uzupełnienie odpowiedzi SLM, zauważ, że w systemie plików ext2 / 3/4 możesz replikować zachowanie BSD, które opisujesz, używając bsdgroupsopcji montowania na partycji. Ze strony podręcznika mount(1):

grpid|bsdgroups and nogrpid|sysvgroups
              These options define what group id a newly  created  file  gets.
              When  grpid  is  set,  it takes the group id of the directory in
              which it is created; otherwise (the default) it takes the  fsgid
              of  the current process, unless the directory has the setgid bit
              set, in which case it takes the gid from the  parent  directory,
              and also gets the setgid bit set if it is a directory itself.
użytkownik60039
źródło