Per impostare il gruppo, dai /var/www
il setgid bit:
chgrp www-data /var/www
chmod g+s /var/www
Per modificare anche le sottodirectory:find /var/www -type d -exec chmod g+s {} +
Questo farà sì che tutti i file appena creati ereditino il gruppo della directory padre, invece di quello dell'utente.
Per impostare le autorizzazioni di gruppo predefinite, dovrai utilizzare ACL . Imposta un ACL "predefinito":
setfacl -m "default:group::rwx" /var/www
Per modificare 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 ottenere "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 fstab:modifica
/etc/fstab
avereacl
nel campo delle opzioni -
a livello di filesystem:
tune2fs -o acl /dev/diskname
-
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 riceverai alcun errore che indichi 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