90 votes

Comment faire en sorte que la permission d'un nouveau fichier hérite du répertoire parent ?

J'ai un répertoire appelé data . Ensuite, j'exécute un script sous l'identifiant de l'utilisateur 'robot'. Le robot écrit dans le fichier data et mettre à jour les fichiers qui s'y trouvent. L'idée est data est ouvert pour que moi et le robot puissions le mettre à jour.

J'ai donc configuré la permission et le groupe de propriétaires comme suit

drwxrwxr-x  2 me robot-grp 4096 Jun 11 20:50 data

où moi et le robot appartenons tous deux au groupe des robots. Je change la permission et le groupe propriétaire récursivement comme le répertoire parent.

Je télécharge régulièrement de nouveaux fichiers dans le data répertoire en utilisant rsync . Malheureusement, les nouveaux fichiers téléchargés n'héritent pas de la permission du répertoire parent comme je l'espérais. Au lieu de cela, cela ressemble à ceci

-rw-r--r-- 1 me users       6 Jun 11 20:50 new-file.txt

Quand le robot essaie de mettre à jour new-file.txt il échoue en raison d'un manque d'autorisation du fichier.

Je ne suis pas sûr que le paramétrage de umask aide. En tout cas, les nouveaux fichiers ne le suivent pas vraiment.

$ umask -S
u=rwx,g=rx,o=rx

Je suis souvent dérouté par les autorisations de fichiers Unix. Est-ce que j'ai même un bon plan ? J'utilise Debian Lenny.

57voto

churnd Points 4558

Vous ne voulez pas modifier l'umask par défaut de votre système, c'est un risque pour la sécurité. L'option sticky bit fonctionne dans une certaine mesure, mais l'utilisation des ACL est la meilleure solution. C'est plus facile que vous ne le pensez. Le problème des ACL de base est qu'elles ne sont pas récursives par défaut. Si vous définissez une ACL sur un répertoire, seuls les fichiers contenus dans ce répertoire héritent de l'ACL. Si vous créez un sous-répertoire, il n'obtient pas la liste de contrôle d'accès parente, à moins que la liste de contrôle d'accès ne soit configurée pour être récursive.

Tout d'abord, assurez-vous que les ACL sont activées pour le volume sur lequel se trouve le répertoire. Si vous avez tune2fs vous pouvez effectuer les opérations suivantes :

# tune2fs -l /dev/sda1 | grep acl
Default mount options:    user_xattr acl

Si vous n'avez pas tune2fs puis examinez fstabs :

# cat /etc/fstab 
/dev/system/root        /                       ext3    defaults        1 1
/dev/system/home        /home                   ext3    defaults        1 2
/dev/storage/data       /data                   ext3    defaults        1 2
LABEL=/boot             /boot                   ext3    defaults        1 2

La 4ème colonne qui indique "defaults" signifie que sur mon système (CentOS 5.5), les ACL sont activées. En cas de doute, laissez les valeurs par défaut. Si vous essayez de définir l'ACL et qu'il y a une erreur, revenez en arrière et ajoutez l'option acl à /etc/fstab juste après defaults : defaults,acl .

D'après ce que je comprends, vous voulez que tous les membres du groupe d'utilisateurs aient un accès en écriture au répertoire de données. Cela se fait de la manière suivante :

setfacl -Rm g:users:rwX,d:g:users:rwX data/

33voto

Marquer un répertoire setgid ( g+s ) fera en sorte que les nouveaux fichiers héritent de la propriété du groupe du répertoire, mais l'option -g de rsync tentera de passer outre.

5voto

Menno Points 327

Les autres réponses s'appliquent dans un cas général, mais comme vous mentionnez que rsync est à l'origine du problème, il se peut que vous deviez simplement ajuster son invocation.

Pour commencer, le populaire -a permet à rsync de copier les permissions ; utilisez le paramètre -r iste de -a ou ajouter -no-p (pour une synchronisation sans permission) et -no-g (pour aucune synchronisation de groupe). rsync supporte également --chmod pour modifier les permissions sur les fichiers nouvellement créés.

3voto

Hari Nandha Points 99

Votre umask est incorrect pour les permissions que vous voulez. Vous voulez un umask de 002. Vous avez actuellement un umask de 022. De plus, le commentaire sur le fait de rendre le répertoire setgid est correct, mais je ne suis pas sûr que la propriété du groupe de fichiers soit quelque chose que vous voulez changer ou non.

Les autorisations de fichiers Unix sont en fait un modèle très simple. Pour ma part, je trouve les ACL complètement confuses :-)

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X