J'ai un problème avec les permissions sur un serveur Linux. Je suis habitué à BSD. Lorsqu'un répertoire appartient à un groupe auquel l'utilisateur qui le possède n'appartient pas, tel que www-data, les fichiers qui y sont créés appartiendront à ce groupe. Ceci est important car je veux que les fichiers soient lisibles par le serveur Web (que je n'exécuterai pas en tant que root) mais pour qu'un utilisateur puisse toujours mettre de nouveaux fichiers dans le répertoire. Je ne peux pas mettre les utilisateurs dans www-data car ils peuvent alors lire les sites Web de tous les 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 pour le moment….
drwxr-x--- 3 john www-data 4096 Feb 17 21:27 john
C'est un comportement standard sur BSD pour que les permissions fonctionnent de cette façon. Comment puis-je faire en sorte que Linux fasse cela ?
Réponse acceptée :
On dirait que vous décrivez la fonctionnalité setgid bit où, lorsqu'un répertoire qui l'a défini, forcera tous les nouveaux fichiers créés à l'intérieur de celui-ci à avoir leur groupe défini sur le même groupe que celui défini dans le répertoire parent.
Exemple
$ whoami
saml
$ groups
saml wheel wireshark
configurer un répertoire avec des permissions + des propriétés
$ 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/
toucher 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 vous voulez. Si vous voulez vraiment exactement ce que vous avez décrit, je pense que vous devrez recourir à la fonctionnalité des listes de contrôle d'accès pour obtenir cela (ACL).
ACL
Si vous souhaitez avoir un peu plus de contrôle sur les autorisations sur les fichiers créés sous le répertoire, somedir
, vous pouvez ajouter la règle ACL suivante pour définir les autorisations par défaut comme suit.
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 ACL 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 permissions par défaut (setfacl -Rdm
) défini de sorte que les autorisations soient (r-x
) par défaut (g:apache:rx
). Cela force tous les nouveaux fichiers à n'avoir que leur r
bit activé.