J'ai un problème avec les autorisations sur un serveur Linux. Je suis habitué à BSD. Lorsqu'un répertoire appartient à un groupe, l'utilisateur qui le possède n'appartient pas à www-data, par exemple, les fichiers créés dans celui-ci appartiennent à ce groupe. Ceci est important car je veux que les fichiers soient lisibles par le serveur web (que je ne lancerai pas en tant que root) mais donc un utilisateur peut toujours mettre de nouveaux fichiers dans le répertoire. Je ne peux pas mettre les utilisateurs dans www-data car ils peuvent alors lire tous les sites Web des autres utilisateurs.
Je veux que le serveur Web lise tous les sites Web, je veux que les utilisateurs puissent changer les leurs.
Les autorisations sont définies comme ceci sur les dossiers en ce moment ....
drwxr-x--- 3 john www-data 4096 Feb 17 21:27 john
C'est un comportement standard sur BSD que les autorisations fonctionnent de cette façon. Comment puis-je demander à Linux de faire cela?
Il semble que vous décriviez la fonctionnalité setgid bit où lorsqu'un répertoire qui l'a défini, forcera tous les nouveaux fichiers créés à l'intérieur d'avoir leur groupe défini sur le même groupe défini sur le répertoire parent .
$ whoami
saml
$ groups
saml wheel wireshark
configurer un répertoire avec des perms + des propriétaires
$ 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/
touchez un fichier comme saml dans ce répertoire
$ whoami
saml
$ touch somedir/afile
$ ll somedir/afile
-rw-rw-r--. 1 saml Apache 0 Feb 17 20:11 somedir/afile
Cela vous donnera approximativement ce que cela ressemble à ce que vous voulez. Si vous voulez vraiment exactement ce que vous avez décrit, je pense que vous devrez recourir à la fonctionnalité de listes de contrôle d'accès pour obtenir cela (ACL).
Si vous souhaitez obtenir un peu plus de contrôle sur les autorisations sur les fichiers qui sont créés dans le répertoire, somedir
, vous pouvez ajouter la règle ACL suivante pour définir les autorisations par défaut comme ceci.
avant
$ ll -d somedir
drwxr-s---. 2 saml Apache 4096 Feb 17 20:46 somedir
définir les autorisations
$ Sudo setfacl -Rdm g:Apache:rx somedir
$ ll -d somedir/
drwxr-s---+ 2 saml Apache 4096 Feb 17 20:46 somedir/
Remarquez le +
à la fin, cela signifie que ce répertoire a des listes de contrôle d'accès qui lui sont appliquées.
$ 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::---
après
$ 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::---
Remarquez avec les autorisations par défaut (setfacl -Rdm
) défini de sorte que les autorisations soient (r-x
) par défaut (g:Apache:rx
). Cela force tout nouveau fichier à avoir uniquement son bit r
activé.
TL: DR; pour que les fichiers new héritent du groupe du dossier conteneur, faites:
$ chmod g+s somefolder
Remarque: son implicite dans la réponse acceptée, ce n'est qu'un extrait.
En complément de la réponse de slm, notez que, sur un système de fichiers ext2/3/4, vous pouvez répliquer le comportement BSD que vous décrivez en utilisant l'option de montage bsdgroups
sur la partition. Depuis la page de manuel 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.