Obtenir de nouveaux fichiers pour hériter des autorisations de groupe sous Linux

88

Je rencontre un problème d'autorisations sur un serveur Linux. Je suis habitué à BSD. Lorsqu'un répertoire appartient à un groupe dont l'utilisateur ne le possède pas, tel que www-data, les fichiers créés dans ce répertoire seront la propriété de ce groupe. Ceci est important car je veux que les fichiers soient lisibles par le serveur Web (que je ne vais pas exécuter en tant que root), mais 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 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 le comportement standard sous BSD que les autorisations fonctionnent de cette façon. Comment faire pour que Linux fasse cela?

John Tate
la source
2
Pouvez-vous utiliser les ACL?
slm

Réponses:

129

On dirait que vous décrivez la fonctionnalité setgid bit où, lorsqu'un répertoire dans lequel il est défini, tous les nouveaux fichiers créés dans celui-ci obligeront leur groupe à être défini sur le même groupe que celui défini dans le répertoire parent.

Exemple

$ whoami
saml

$ groups
saml wheel wireshark

mettre en place un répertoire avec des permanentes + 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 aurez besoin de recourir à la fonctionnalité Listes de contrôle d'accès pour obtenir cette liste (ACL).

ACL

Si vous souhaitez contrôler un peu plus les autorisations sur les fichiers créés dans le répertoire somedir, vous pouvez ajouter la règle d'ACL suivante pour définir les autorisations par défaut de la manière suivante.

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/

Notez que, +à la fin, cela signifie que des ACL sont appliquées à ce répertoire.

$ 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::---

Notez que les autorisations par défaut ( setfacl -Rdm) sont définies de sorte que les autorisations soient ( r-x) par défaut ( g:apache:rx). Cela force tous les nouveaux fichiers à avoir uniquement leur rbit activé.

slm
la source
Cela semble fournir la fonctionnalité que je voulais, merci.
John Tate
Cela semble résoudre mon problème similaire, aussi. Cependant, je ne comprends pas très bien la dernière phrase: "Cela oblige tous les nouveaux fichiers à avoir uniquement leur bit activé". Pourquoi la permission x n'est-elle pas activée? Y a-t-il un moyen de l'activer par défaut ??
Yaobin
1
@yaobin Je pense que c'est une question de sécurité, vous ne voulez pas vraiment avoir un fichier exécutable par défaut
cdarken
Cela ne fonctionne pas avec unzip?
datasn.io
@ datasn.io - consultez la page de manuel de unzip. Plus précisément, le -Xcommutateur.
slm
38

TL: DR; pour que les nouveaux fichiers héritent du groupe du dossier conteneur, procédez comme suit:

$ chmod g+s somefolder

Remarque: son implicite dans la réponse acceptée, il ne s'agit que d'un extrait de code.

alo Malbarez
la source
3
setgid signifie que les nouveaux fichiers et dossiers auront le bon groupe, mais rappelez-vous que si vous déplacez des fichiers dans l'arborescence, le propriétaire approprié ne sera pas configuré. L'approche ACL fait face à cela (en général).
Chris Morgan
@ChrisMorgan comment y fait-il face? Les solutions de la réponse acceptée ne faisaient rien pour les fichiers déplacés dans mon cas.
Dan M.
@DanM .: avec les modes de fichier, vous définissez des autorisations non héritées; mais avec ACLs, vous définissez des autorisations qui sont héritées (bien que les enfants peuvent spécifier leur propre ACLs de cette dérogation que), en cours de vérification lors de l' exécution.
Chris Morgan le
@ChrisMorgan oui. Comment tu fais ça? La solution utilisant la réponse acceptée sous forme ACL ne fonctionne pas.
Dan M.
10

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' bsdgroupsoption de montage sur la partition. De la mount(1)page de manuel:

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.
utilisateur60039
la source