Comment forcer le groupe et les autorisations pour les fichiers créés dans un répertoire spécifique?

27

Pour les fichiers créés à partir du compte testuser dans le répertoire / var / www, j'ai besoin qu'ils aient g + rwx en tant qu'autorisations et www-data en tant que groupe.

Comment puis-je atteindre cet objectif?

Je crée les fichiers via SSH.

Mr.Gando
la source
1
Comment votre utilisateur crée-t-il des fichiers? Via FTP stor/ appe? Via HTTP PUT? Via un compte shell? Ces détails sont importants, car ils affectent grandement les réponses possibles et doivent être dans votre question.
JdeBP
Merci pour l'entrée :), je crée tout via SSH.
Mr.Gando

Réponses:

53

Pour définir le groupe, donnez /var/wwwle bit setgid :

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

Pour ajuster également les sous-répertoires: find /var/www -type d -exec chmod g+s {} +

Cela fera que tous les fichiers nouvellement créés hériteront du groupe du répertoire parent, au lieu de celui de l'utilisateur.


Pour définir les autorisations de groupe par défaut, vous devrez utiliser des ACL . Définissez une ACL "par défaut":

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

Pour ajuster également les sous-répertoires: find /var/www -type d -exec setfacl -m d:g::rwx {} +

Remarque: Le système de fichiers doit avoir la prise en charge ACL activée. Parfois, il est activé par défaut; sur ext3 ou ext4, vous pouvez obtenir "Opération non prise en charge", auquel cas elle doit être activée manuellement:

  • Pour un système de fichiers actuellement monté: mount -o remount,acl /

  • En permanence - l' une des méthodes ci-dessous:

    • au niveau fstab: modifier /etc/fstabpour avoir acldans le champ d'options

    • au niveau du système de fichiers: tune2fs -o acl /dev/diskname

grawity
la source
ne pouvez-vous pas obtenir les sous-répertoires avec chmod -R g + s / var / www? Il ne semble pas que vous ayez besoin de la commande find.
bobpaul
4
@bobpaul: Non, car chmodobtiendrait également tous les fichiers.
grawity
Notez que certaines commandes, en particulier install, parviennent d'une manière ou d'une autre à contourner les ACL par défaut des répertoires.
Ulrich Schwarz
@grawity C'est une très bonne réponse et je suis sûr qu'il existe une solution à mon problème, mais je ne peux pas le comprendre. J'ai un /var/www/html/projectsdossier et lorsque www-data crée un fichier, il a des rw-rw-rautorisations mais quand je fais quelque chose dans la console, il crée un fichier avec rw-r--r. Comment puis-je forcer les nouveaux fichiers créés à toujours avoir des rw-rw-rautorisations?
lewis4u
@ lewis4u: Globalement ou par répertoire? Les autorisations par défaut globales (enfin, par processus) sont contrôlées par umask. Les autorisations par défaut par répertoire sont modifiables en utilisant setfaclcomme dans le message principal.
grawity
3

Cela pourrait avoir bloqué quelques personnes avec la réponse `` grawity '' sur setgid, si le groupe du dossier est différent du vôtre, vous devrez peut-être exécuter chmod en tant que root, mais vous n'obtiendrez aucune erreur indiquant que vous devez le faire.

$ 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
LukePH
la source
Je tirais mes cheveux avant de traverser ça. Merci.
AndrewStevens
0

Le groupe de fichiers en cours de création par un utilisateur est le groupe de cet utilisateur (dans / etc / group). Les autorisations sont contrôlées par le paramètre UMASK voir ceci

DrNoone
la source