Sur mon serveur, j'ai un répertoire /srv/svn
.
Est-il possible de définir ce répertoire pour avoir plusieurs propriétaires de groupe, par exemple devFirmA
, devFirmB
et devFirmC
?
Le fait est que je veux Subversion
le contrôle de version gérer plusieurs utilisateurs sur plusieurs référentiels et je ne sais pas comment fusionner/srv/svn
, le répertoire racine des référentiels, autorisations. J'ai, par exemple, trois entreprises, FirmA
, FirmB
et FirmC
. Maintenant, à l'intérieur /srv/svn
J'ai créé trois répertoires, FirmA
, FirmB
, FirmC
et à l'intérieur, j'ai créé un référentiel pour chaque projet et maintenant je ne sais pas comment établir la permission schéma puisque tous les éléments à l'intérieur de /srv/svn
appartiennent à root:root
, ce qui ne va pas, ou je me trompe?
Il s'agit d'un problème extrêmement courant, si je le comprends bien et que je le rencontre constamment. Si j'utilisais des ACL pour chaque problème de regroupement trivial, j'aurais des tonnes de systèmes ingérables. Ils utilisent les meilleures pratiques lorsque vous ne pouvez pas le faire autrement, pas pour cette situation. C'est la méthode que je recommande fortement.
Vous devez d'abord définir votre umask sur 002, afin qu'un groupe puisse partager avec lui-même. Je crée généralement un fichier comme /etc/profile.d/firm.sh
, puis ajoutez une commande de test avec l'umask.
[ $UID -gt 10000 ] && umask 002
Ensuite, vous devez définir les répertoires dans leurs groupes respectifs,
chgrp -R FirmA /srv/svn/FirmA
chgrp -R FirmB /srv/svn/FirmB
chgrp -R FirmC /srv/svn/FirmC
Enfin, vous devez définir correctement le bit SGID, afin que le groupe reste toujours celui que vous avez défini. Cela empêchera un fichier écrit d'être défini sur le GID de l'auteur.
find /srv/svn/FirmA -type d -print0 | xargs -0 chmod 2775
find /srv/svn/FirmB -type d -print0 | xargs -0 chmod 2775
find /srv/svn/FirmC -type d -print0 | xargs -0 chmod 2775
find /srv/svn/FirmA -type f -print0 | xargs -0 chmod 664
find /srv/svn/FirmB -type f -print0 | xargs -0 chmod 664
find /srv/svn/FirmC -type f -print0 | xargs -0 chmod 664
Maintenant enfin si vous voulez empêcher les autres utilisateurs d'accéder aux répertoires.
chmod 2770 /srv/svn/FirmA
chmod 2770 /srv/svn/FirmB
chmod 2770 /srv/svn/FirmC
Vous ne pouvez avoir qu'un seul groupe en tant que propriétaire.
Cependant, en utilisant listes de contrôle d'accès , vous pouvez définir des autorisations pour d'autres groupes.
Vérifiez si ACL est installé en émettant la commande getfacl
. Si votre système n'a pas installé ACL, installez les outils de ligne de commande qui sont dans le acl
package avec: Sudo apt-get install acl
Avec getfacl
vous pouvez lire les informations ACL d'un répertoire ou d'un autre fichier, et avec setfacl
vous pouvez ajouter des groupes à un fichier.
Par exemple:
setfacl -m g:devFirmB:rwx /srv/svn/
Ajoute le groupe devFirmB
avec r ead, w rite, e x ecute les autorisations sur le répertoire /srv/svn
.
Si vous souhaitez également que les fichiers créés dans ce répertoire appartiennent à plusieurs groupes, définissez l'ACL comme ACL par défaut. Le X
dans l'entrée de groupe par défaut signifie "autoriser l'exécution si exécutable par le propriétaire (ou toute autre personne)".
setfacl -m g:devFirmB:rwx /srv/svn/
setfacl -d -m g:devFirmB:rwX /srv/svn/
Il n'est pas possible d'avoir un fichier appartenant à plusieurs groupes Linux avec des autorisations Unix traditionnelles. (Cependant, c'est possible avec ACL .)
Mais vous pouvez utiliser la solution de contournement suivante et créer un nouveau groupe (par exemple appelé devFirms
) qui inclura tous les utilisateurs des groupes devFirmA
, devFirmB
et devFirmC
.
Vous créez de nouveaux groupes d'utilisateurs avec:
Sudo addgroup NEWGROUPNAME
Tout d'abord, vous devrez peut-être installer id-utils
pour obtenir la commande lid
-:
Sudo apt-get install id-utils
Ensuite, vous pouvez exécuter la ligne de code suivante pour copier facilement tous les utilisateurs de SOURCEGROUP
vers TARGETGROUP
. Bien sûr, vous devez exécuter la commande une fois pour chaque groupe que vous souhaitez copier. N'oubliez pas de remplacer les espaces réservés capitalisés par les noms de groupe réels.
for u in $(lid -g -n SOURCEGROUP); do Sudo usermod -a -G TARGETGROUP $u; done
Donc, dans votre cas, vous devrez exécuter la commande (toutes les lignes à la fois):
Sudo addgroup devFirms &&
for u in $(lid -g -n devFirmA); do Sudo usermod -a -G devFirms $u; done &&
for u in $(lid -g -n devFirmB); do Sudo usermod -a -G devFirms $u; done &&
for u in $(lid -g -n devFirmC); do Sudo usermod -a -G devFirms $u; done
Notez que ces commandes copient uniquement tous les utilisateurs qui sont membres actuels des groupes source. Chaque utilisateur qui sera ajouté plus tard devra également être ajouté manuellement à votre groupe commun avec la commande adduser
. Remplacez encore une fois les espaces réservés en majuscule par le nom réel de l'utilisateur et du groupe (devFirms
):
Sudo adduser NEWUSER TARGETGROUP
Merci à Justin Ethier pour sa réponse à nix & Linux.SE: Ajouter tous les utilisateurs d'un groupe à un autre groupe?
Afin de fournir différents droits à plusieurs groupes ou utilisateurs, utilisez les commandes suivantes (testées sur RHEL 6 et 7):
Pour faire un nouveau propriétaire du groupe:
setfacl -m g:<group_name>:<rights you want to give eg.rwx> -R <directory_name>
Pour vérifier les paramètres actuels d'ACL:
getfacl <directory_name>
Non, ce n'est pas possible.
Chaque fichier (et donc aussi les répertoires) ne peut avoir qu'un seul utilisateur et un seul groupe.