2010-06-12 04:06:50 +0000 2010-06-12 04:06:50 +0000
86
86

Comment faire pour que les autorisations de nouveaux fichiers héritent du répertoire parent ?

J'ai un répertoire appelé data. Ensuite, j'exécute un script sous l'identifiant “robot”. Le robot écrit dans le répertoire data et met à jour les fichiers à l'intérieur. L'idée est que le répertoire data est ouvert à la mise à jour pour moi et le robot.

J'ai donc configuré le groupe de permission et de propriétaire comme ceci

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

où moi et le robot appartiennent au “robot-grp”. Je change les droits et le groupe de propriétaires récursivement 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 des droits 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 essaie de mettre à jour new-file.txt, il échoue à cause du manque de permission des fichiers.

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

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

Je suis souvent confondu par la permission des fichiers Unix. Ai-je au moins un bon plan ? J'utilise Debian Lenny.

Réponses (4)

53
53
53
2010-06-13 02:10:58 +0000

Vous ne voulez pas changer l'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 ACL est la meilleure solution. C'est plus facile que vous ne le pensez. Le problème avec les 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 à l'intérieur de ce répertoire héritent de l'ACL. Si vous créez un sous-répertoire, il n'obtient pas l'ACL parent à moins que l'ACL 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 procéder comme suit :

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

Si vous n'avez pas tune2fs, examinez alors 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 4e colonne qui dit “par défaut” signifie que sur mon système (CentOS 5.5), les ACL sont allumés. En cas de doute, laissez les valeurs par défaut. Si vous essayez de définir les ACL et qu'elles sont en erreur, 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 je comprends, vous voulez que tout le monde dans le groupe d'utilisateurs ait un accès en écriture au répertoire de données. Pour ce faire, voici comment procéder :

setfacl -Rm g:users:rwX,d:g:users:rwX data/
32
32
32
2010-06-12 04:13:24 +0000

Marquer un setgid de répertoire (g+s) fera que les nouveaux fichiers hériteront de la propriété de groupe du répertoire, mais l'option -g de rsync tentera d'outrepasser cela.

4
4
4
2015-09-03 15:36:56 +0000

D'autres réponses s'appliquent dans un cas général, mais comme vous mentionnez que rsync est une source du problème, il se peut que vous deviez simplement accorder son invocation.

Pour commencer, le drapeau populaire -a fait en sorte que rsync copie les permissions ; utilisez -r au lieu de -a ou ajoutez -no-p (pour une synchronisation sans permission) et -no-g (pour une synchronisation sans groupe). De plus, rsync supporte le drapeau --chmod pour modifier les permissions sur les fichiers nouvellement créés.

3
3
3
2010-06-12 04:43:45 +0000

Votre umask n'est pas adapté aux autorisations que vous souhaitez. 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 permissions des fichiers

Unix sont en fait un modèle très simple. Je trouve que les ACL me déconcertent complètement :-)