Délégation de droits

Submitted by ptitoliv (not verified) on Thu, 12/24/2009 - 02:48

Généralement, la gestion des droits sur les SCM est centralisée et sous la responsabilité de l'administrateur du repository. Cela peut être problématique en cas d'indisponibilité de cette personne en cas de demande de modifications des droits sur un repository.

Un des points forts de gitolite est justement donc de pouvoir déléguer les droits sur un repository existant à un autre utilisateur gitolite enregistré autre que l'administrateur gitolite.

Nous allons donc voir dans cette dernière partie avec un exemple concret de délégations de droits qui est la meilleure manière d'expliquer la délégations de droits sur gitolite.

Nous allons donc considérer un utilisateur alice enregistré dans la base des utilisateurs gitolite et nous allons lui déléguer les droits d'administration sur le repository monprojet-kitu.

Déclaration des groupes

La méthode la plus conseillée pour gérer les délégations de droits est de regrouper les repositories dans des groupes et d'activer la délégation des droits sur un groupe de repositories.

Nous allons donc créer un groupe alice_repos dans lequel nous allons mettre le repository monprojet-kitu.

Tout va se faire en tant qu'administrateur gitolite, seul utilisateur à avoir l'accès à la branche master qui gère les droits de tous les repositories.

Après avoir fait un update de la branche master si nécessaire, on édite le fichier conf/gitolite.conf.

#Rajout du groupe
@alice_repos = monprojet-kitu

Ce code permet donc de créer le groupe alice_repos et de rajouter le repository dedans. Si l'on souhaite inclure un autre repository, il suffit de le rajouter à la suite.

Une fois le groupe déclaré, il faut procéder à la délégation des droits. Sous gitolite, il faut donc déléguer des droits en écriture sur une partie du repository gitolite. Il faut donc rajouter dans le bloc de déclaration du repository, l'instruction suivante :

repo gitolite-admin
RW alice_repos = alice

Fonctionnellement, cela signifie que l'on délègue à alice la possibilité de gérer les droits pour tous les repositories membre du groupe alice_repos. Cependant, si l'on se rapelle bien gitolite est avant tout un repository git avec des hooks particuliers. Si l'on se concentre donc sur ce qui est fait niveau git avec cette configuration, on se rend compte qu'en fait on vient de donner à alice des droits sur unr branche portant le nom du groupe.

Les droits des repositories du groupe seront gérées dans une branche portant le même nom que le groupe et dont les droits d'accès sont fixés par les ACLs gitolite

Une fois les modifications faites dans le fichier gitolite.conf, ne pas oublier de commiter et de pusher les modifications sur le serveur de référence.

Gestion des droits délégués

Nous sommes à présent connectés en tant qu'alice (A savoir dans un compte utilisateur ayant accès à la clé privée pour le compte alice gitolite).

La première étape est de récupérer le repository gitolite-admin en tant qu'alice. Etant donné qu' l'administrateur a attribué des droits à alice, il est possible de faire un clone. (Opération impossible sans aucun droit sur ce repository).

devalice@devstation:~$ git clone ssh://git@serveur-git/gitolite-admin
Initialized empty Git repository in /home/devalice/gitolite-admin/.git/
remote: Counting objects: 86, done.
remote: Compressing objects: 100% (66/66), done.
Receiving objects: 100% (86/86), 7.74 KiB, done.
Resolving deltas: 100% (13/13), done.
remote: Total 86 (delta 13), reused 0 (delta 0)

Création de la branche

L'étape suivante consiste à créer une branche dans le repository gitolite-admin correspondante au groupe pour lequel alice à les droits et se positionner dessus.

devalice@devstation:~/gitolite-admin$ git branch alice_repos
devalice@devstation:~/gitolite-admin$ git checkout alice_repos
Switched to branch 'alice_repos'

A présent il faut créer le fichier de configuration décrivant les droits établis par alice. Pour créer ce fichier, il faut respecter certaines contraintes pour que celui-ci soit validé par gitolite :

  • Le fichier doit être contenu dans le répertoire conf/fragments. S'il n'existe pas dans la branche, le créer
  • Le nom du fichier doit avoir le format suivant nom_du_groupe.conf

Pour notre exemple, cela donne donc les commandes suivantes :

devalice@devstation:~/gitolite-admin$ mkdir -p conf/fragments

Puis on créé un fichier nommé alice_repos.conf contenant les droits sur les repositories comme par exemple :
repo monprojet-kitu
RW+ = alice
R = @all

Avec cette on configuration, on donne tous les droits à alice et les droits en lecture pour tout le monde. Une fois le fichier sauvé, il faut le committer dans la branche. Si le fichier n'existait pas il faut l'ajouter avant à l'aborescence git.

devalice@devstation:~/gitolite-admin$ git add conf/fragments/alice_repos.conf
devalice@devstation:~/gitolite-admin$ git commit conf/fragments/alice_repos.conf -m "Add rights by alice"

La dernière étape consiste à pusher les modifications sur le serveur déférence afin de générer les ACLs. Attention par contre à pusher la branche de délégation et non la branche master.

devalice@devstation:~/gitolite-admin$ git push origin alice_repos

Lors du push les nouvelles ACLs sont générées en tentant compte de ces droits délégués.

Important : Il est possible de déclarer des droits à la fois dans la branche master mais aussi dans une branche de délégation. Dans ce cas la, les droits s'ajoutent.