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.
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/
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.
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.
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. :-)