Come imposto il gruppo e le autorizzazioni per i file creati all'interno di una directory specifica?


27

Per i file creati dall'account testuser nella directory / var / www, ho bisogno che abbiano g + rwx come permessi e www-data come gruppo.

Come posso raggiungere questo obiettivo?

Sto creando i file tramite SSH.


1
In che modo il tuo utente sta creando i file? Via FTP stor/ appe? Via HTTP PUT? Tramite un account shell? Questi dettagli sono importanti, perché influiscono notevolmente sulle possibili risposte e devono essere nella tua domanda.
JdeBP,

Grazie per l'input :), sto creando tutto tramite SSH.
Mr. Gando,

Risposte:


53

Per impostare il gruppo, dare /var/wwwil bit setgid :

chgrp www-data /var/www
chmod g+s /var/www

Per regolare anche le sottodirectory: find /var/www -type d -exec chmod g+s {} +

Ciò farà sì che tutti i file appena creati ereditino il gruppo della directory principale, anziché l'utente.


Per impostare le autorizzazioni di gruppo predefinite, dovrai utilizzare gli ACL . Imposta un ACL "predefinito":

setfacl -m "default:group::rwx" /var/www

Per regolare anche le sottodirectory: find /var/www -type d -exec setfacl -m d:g::rwx {} +

Nota: il file system deve avere il supporto ACL abilitato. A volte è attivo per impostazione predefinita; su ext3 o ext4 potresti ricevere "Operazione non supportata", nel qual caso deve essere abilitato manualmente:

  • Per un filesystem attualmente montato: mount -o remount,acl /

  • Permanentemente - uno dei metodi seguenti:

    • a livello di fstab: modifica /etc/fstabda inserire aclnel campo delle opzioni

    • a livello di filesystem: tune2fs -o acl /dev/diskname


non riesci a ottenere le sottodirectory con chmod -R g + s / var / www? Non sembra che dovresti aver bisogno del comando find.
bobpaul,

4
@bobpaul: No, perché chmodotterrebbe anche tutti i file.
Grawity

Si noti che alcuni comandi, in particolare install, riescono in qualche modo a bypassare gli ACL predefiniti della directory.
Ulrich Schwarz,

@grawity Questa è davvero un'ottima risposta e sono sicuro che ci sia una soluzione per il mio problema, ma non riesco a capirlo. Ho una /var/www/html/projectscartella e quando www-data crea un file ha i rw-rw-rpermessi ma quando faccio qualcosa in console crea un file con rw-r--r. Come posso forzare i nuovi file creati ad avere sempre le rw-rw-rautorizzazioni?
lewis4u,

@ lewis4u: globalmente o per directory? Le autorizzazioni predefinite globali (bene, per processo) sono controllate da umask. Le autorizzazioni predefinite per directory sono modificabili usando setfaclcome nel post principale.
Grawity

3

Questo potrebbe aver bloccato alcune persone con la risposta 'grawity' su setgid, se il gruppo della cartella è diverso dal tuo potresti dover eseguire chmod come root ma non otterrai alcun errore che indica che devi farlo.

$ ls -ld dir
drwxrwxr-x 2 luke testgroup 4096 Mar  9 10:44 dir

$ chmod g+s dir                                    #no errors

$ ls -ld dir
drwxrwxr-x 2 luke testgroup 4096 Mar  9 10:44 dir  #but nothing changed

$ touch dir/nosudo && ls -l dir/
-rw-rw-r-- 1 luke luke 0 Mar  9 10:51 nosudo       #and the group is still wrong


$ sudo chmod g+s dir

$ ls -ld dir
drwxrwsr-x 2 luke testgroup 4096 Mar  9 10:44 dir  #the setgid bit is now on

$ touch dir/withsudo && ls -l dir/
-rw-rw-r-- 1 luke luke      0 Mar  9 10:51 nosudo
-rw-rw-r-- 1 luke testgroup 0 Mar  9 10:51 withsudo #and group is set

Mi stavo togliendo i capelli prima di imbattermi in questo. Grazie.
AndrewStevens,

0

Il gruppo di file che viene creato da un utente è il gruppo di quell'utente (in / etc / group). Le autorizzazioni sono controllate dal parametro UMASK, vedere questo

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.