Ottenere nuovi file per ereditare le autorizzazioni di gruppo su Linux


88

Sto riscontrando un problema con le autorizzazioni su un server Linux. Sono abituato a BSD. Quando una directory appartiene a un gruppo in cui l'utente che la possiede non si trova come www-data, i file creati in essa appartengono a quel gruppo. Questo è importante perché voglio che i file siano leggibili dal server web (che non eseguirò come root) ma che quindi un utente può ancora inserire nuovi file nella directory. Non riesco a mettere gli utenti in dati www perché in questo modo possono leggere tutti i siti Web di altri utenti.

Voglio che il server web legga tutti i siti Web, voglio che gli utenti possano cambiare il proprio.

Le autorizzazioni sono impostate in questo modo sulle cartelle al momento ....

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

È un comportamento standard su BSD che le autorizzazioni funzionino in questo modo. Come posso ottenere Linux per fare questo?


2
Puoi usare ACL?
slm

Risposte:


129

Sembra che tu stia descrivendo la funzionalità bit setgid in cui quando una directory che l'ha impostata forzerà tutti i nuovi file creati al suo interno per avere il loro gruppo impostato sullo stesso gruppo che è impostato sulla directory padre.

Esempio

$ whoami
saml

$ groups
saml wheel wireshark

imposta una directory con permanenti + proprietà

$ 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/

toccare un file come saml in questa directory

$ whoami
saml

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

Questo ti darà approssimativamente quello che sembra che tu voglia. Se vuoi veramente esattamente quello che hai descritto, penso che dovrai ricorrere alla funzionalità degli elenchi di controllo di accesso per ottenerlo (ACL).

ACL

Se si desidera ottenere un po 'più di controllo sulle autorizzazioni per i file creati nella directory somedir, è possibile aggiungere la seguente regola ACL per impostare le autorizzazioni predefinite in questo modo.

prima

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

impostare le autorizzazioni

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

Si noti che +alla fine, ciò significa che a questa directory sono applicati 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::---

dopo

$ 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::---

Si noti che le autorizzazioni predefinite ( setfacl -Rdm) sono impostate in modo che le autorizzazioni siano ( r-x) per impostazione predefinita ( g:apache:rx). Ciò impone che a tutti i nuovi file sia rabilitato solo il bit.


Questo sembra fornire la funzionalità che volevo, grazie.
John Tate,

Questo sembra risolvere anche il mio problema simile. Tuttavia, non capisco bene l'ultima frase: "Questo impone a tutti i nuovi file di avere solo il bit r abilitato". Perché l'autorizzazione x non è abilitata? C'è un modo per abilitarlo di default ??
Yaobin,

1
@yaobin Penso che sia una cosa di sicurezza, non vuoi davvero avere un file eseguibile di default
cdarken

Questo non funziona con unzip?
datasn.io

@ datasn.io - guarda la pagina man di unzip. In particolare l' -Xinterruttore.
slm

38

TL: DR; fare in modo che i nuovi file ereditino il gruppo della cartella del contenitore:

$ chmod g+s somefolder

Nota: è implicito nella risposta accettata, questo è solo uno snippet.


3
setgid significa che i nuovi file e cartelle avranno il gruppo giusto, ma ricorda che se sposti i file nella struttura, non avranno configurato il proprietario giusto. L'approccio ACL lo affronta (in generale).
Chris Morgan,

@ChrisMorgan come ci riesce? Le soluzioni della risposta accettata non hanno fatto nulla per i file spostati nel mio caso.
Dan M.,

@DanM .: con le modalità file, si impostano le autorizzazioni che non sono ereditate; ma con ACL, si impostano le autorizzazioni che vengono ereditate (se i bambini possono specificare ACL di loro che di esclusione che), che è controllato in fase di esecuzione.
Chris Morgan,

@ChrisMorgan sì. Come si fa a farlo? La soluzione che utilizza la risposta accettata dal modulo ACL non funziona.
Dan M.

10

A complemento della risposta di slm, nota che, su un filesystem ext2 / 3/4, puoi replicare il comportamento BSD che descrivi usando l' bsdgroupsopzione mount sulla partizione. Dalla mount(1)pagina man:

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.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.