web-dev-qa-db-fra.com

Comment faire pour que la nouvelle autorisation de fichier hérite du répertoire parent?

J'ai un répertoire appelé data. Ensuite, j'exécute un script sous l'ID utilisateur 'robot'. robot écrit dans le répertoire data et met à jour les fichiers qu'il contient. L'idée est data est ouvert pour moi et robot à mettre à jour.

J'ai donc configuré le groupe de permissions et de propriétaires comme ceci

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

où robot et moi appartenons tous deux au "robot-grp". Je modifie l'autorisation et le groupe de propriétaires de manière récursive comme le répertoire parent.

Je télécharge régulièrement de nouveaux fichiers dans le répertoire data 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ère. Au lieu de cela, il ressemble à ceci

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

Lorsque le robot tente de mettre à jour new-file.txt, il échoue faute d'autorisations de fichier.

Je ne suis pas sûr que le réglage d'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. Ai-je même un bon plan? J'utilise Debian Lenny.

81
Wai Yip Tung

Vous ne voulez pas changer le umask par défaut de votre système, c'est un risque pour la sécurité. L'option sticky bit fonctionnera dans une certaine mesure, mais l'utilisation des listes de contrôle d'accès est la meilleure solution. C'est plus facile que tu ne le penses. Le problème avec les listes de contrôle d'accès de base est qu'elles ne sont pas récursives par défaut. Si vous définissez une liste de contrôle d'accès sur un répertoire, seuls les fichiers de ce répertoire héritent de la liste de contrôle d'accès. Si vous créez un sous-répertoire, la liste de contrôle d'accès mère ne sera pas obtenue à moins que celle-ci ne soit définie sur récursion.

Tout d'abord, assurez-vous que les listes de contrôle d'accès 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, 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 dit "par défaut" signifie sur mon système (CentOS 5.5), les ACL sont activés. En cas de doute, laissez les valeurs par défaut. Si vous essayez de définir la liste de contrôle d'accès et qu'elle est erronée, revenez en arrière et ajoutez l'option acl dans/etc/fstab juste après les valeurs par défaut: defaults,acl.

D'après ce que j'ai compris, vous voulez que tous les utilisateurs du groupe d'utilisateurs aient un accès en écriture au répertoire de données. C'est accompli par ce qui suit:

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

En marquant un ensemble setgid (g+s), les nouveaux fichiers hériteront de la propriété du groupe sur le répertoire, mais l'option -g de rsync tentera de le remplacer.

31

D'autres réponses s'appliquent dans un cas général, mais comme vous mentionnez que rsync est une source du problème, vous devrez peut-être ajuster son invocation.

Pour commencer, le populaire drapeau -a accorde des autorisations de copie à rsync; utilisez -r istead de -a ou ajoutez -no-p (pour aucune synchronisation des autorisations) et -no-g (pour aucune synchronisation de groupe). De plus, rsync prend en charge l'indicateur --chmod pour modifier les autorisations sur les fichiers nouvellement créés.

4
mbq

Votre umask n’est pas conforme aux autorisations que vous souhaitez. Vous voulez un umask de 002. Vous avez actuellement un umask de 022. En outre, le commentaire sur la création du répertoire setgid est correct, mais je ne suis pas sûr si la propriété du groupe de fichiers est quelque chose que vous souhaitez modifier ou non.

Les autorisations de fichiers Unix sont en réalité un modèle très simple. Je trouve les ACL complètement déroutant. :-)

3
Omnifarious