web-dev-qa-db-fra.com

Définition de plusieurs groupes en tant que propriétaires d'annuaire

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?

35
KernelPanic

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
18
J. M. Becker

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/  
27
jcbermu

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?

6
Byte Commander

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>
2
Mr.H

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.

1
Uwe Plonus