Définir un propriétaire par défaut "automatiquement" nécessiterait un répertoire setuid
se comportant comme setgid
. Cependant, bien que cela puisse être configuré sur FreeBSD, d'autres systèmes UNIX et Linux ignorent simplement u+s
. Dans votre cas cependant, il pourrait y avoir une autre solution.
Ce que je veux, c'est avoir un répertoire qui peut être partagé en ajoutant un groupe à un utilisateur. Tout ce qui est créé dans ce répertoire hérite du schéma d'autorisation de son parent. S'il y a un meilleur moyen que ce que j'essaie, je suis tout ouïe.
Donc, fondamentalement, d'après ce que je vois, vous voulez contrôler l'accès à un répertoire en utilisant le mécanisme des groupes. Toutefois, cela ne vous oblige pas à restreindre les autorisations dans la structure de répertoires entière. En fait, le --x
bit d'exécution du répertoire pourrait être exactement ce dont vous avez besoin. Laisse moi te donner un exemple. En admettant que...
- Le groupe contrôlant l'accès au
group_dir
répertoire est ourgroup
.
- Seules les personnes du
ourgroup
groupe peuvent y accéder group_dir
.
user1
et user2
appartiennent à ourgroup
.
- L'umask par défaut est 0022.
... considérez la configuration suivante:
drwxrws--- root:ourgroup |- group_dir/
drwxr-sr-x user1:ourgroup |---- group_dir/user1_submission/
drwxr-sr-x user2:ourgroup |---- group_dir/user2_submission/
-rw-r--r-- user2:ourgroup |-------- group_dir/user2_submission/README
Ici, supposons que chaque élément a été créé par son propriétaire.
Maintenant, dans cette configuration:
- Tous les répertoires peuvent être consultés librement par tout le monde
ourgroup
. N'importe qui du groupe peut créer, déplacer, supprimer des fichiers n'importe où à l'intérieur group_dir
(mais pas plus profondément).
- Toute personne non
ourgroup
présente sera bloquée à group_dir
, et ne pourra donc pas manipuler quoi que ce soit en dessous. Par exemple, user3
(qui n'est pas membre de ourgroup
), ne peut pas lire group_dir/user2_submission/README
(même s'il a l' r--
autorisation sur le fichier lui-même).
Cependant, il y a un petit problème dans ce cas: en raison de l'umask typique, les éléments créés par les utilisateurs ne peuvent pas être manipulés par d'autres membres du groupe. C'est là que les ACL entrent en jeu. En définissant des autorisations par défaut, vous vous assurerez que tout va bien malgré la valeur umask:
$ setfacl -dRm u::rwX,g::rwX,o::0 group_dir/
Cet appel définit:
rw(x)
Autorisations par défaut pour le propriétaire.
rw(x)
Autorisations par défaut pour le groupe.
- Aucune autorisation par défaut pour les autres. Notez que puisque les autres ne peuvent pas accéder de
group_dir
toute façon, peu importe leurs autorisations en dessous.
Maintenant, si je crée un élément en tant que user2
:
$ touch group_dir/user2_submission/AUTHORS
$ ls -l group_dir/user2_submission/AUTHORS
rw-rw---- user2:ourgroup group_dir/user2_submission/AUTHORS
Avec cette ACL en place, nous pouvons essayer de reconstruire notre structure précédente:
drwxrws---+ root:ourgroup |- group_dir/
drwxrws---+ user1:ourgroup |---- group_dir/user1_submission/
drwxrws---+ user2:ourgroup |---- group_dir/user2_submission/
-rw-rw----+ user2:ourgroup |-------- group_dir/user2_submission/README
Là encore, chaque élément est créé par son propriétaire.
De plus, si vous souhaitez donner un peu plus de puissance / sécurité à ceux qui utilisent le répertoire, vous voudrez peut-être envisager un peu collant. Cela empêcherait, par exemple, user1
de supprimer user2_submission
(puisqu'il a l' -w-
autorisation sur group_dir
):
$ chmod +t group_dir/
Maintenant, si user1
essaie de supprimer user2
le répertoire de, il obtiendra une belle Operation not permitted
. Notez cependant que bien que cela empêche les modifications de la structure des répertoires group_dir
, les fichiers et répertoires en dessous sont toujours accessibles:
user1@host $ rm -r user2_submission
Operation not permitted
user1@host $ cat /dev/null > user2_submission/README
user1@host $ file user2_submission/README
user2_submission/README: empty (uh-oh)
Une autre chose à prendre en compte est que les ACL que nous avons utilisées configurent des autorisations par défaut . Il est donc possible pour le propriétaire d'un élément de modifier les autorisations qui lui sont associées. Par exemple, user2
peut parfaitement fonctionner ...
$ chown g= user2_submission/ -R
or
$ chgrp nobody user2_submission -R
... rendant ainsi son répertoire de soumission complet inaccessible à tous les membres du groupe.
Cependant, puisque vous êtes à l'origine prêt à donner un rws
accès complet à n'importe qui dans le groupe, je suppose que vous faites confiance à ces utilisateurs et que vous ne vous attendez pas à trop d'opérations malveillantes de leur part.