Table of Contents

Gestion simple de dépôts avec Gitosis

Introduction

Gitosis est un gestionnaire de dépôts Git. Il permet très simplement d'appliquer des droits d'utilisations sur les dépôts via un seul et unique fichier de configuration. Ttoutes les modifications faites par les développeurs, seront appliquées par un seul utilisateur et unique utilisateur système. La couche d'accès aux dépôts étant gérée par Gitosis.

Installation et configuration

On considère ici que l'on dispose d'un accès root sur la machine et que donc toutes les commandes sont à effectuer avec ce super-utilisateur (sauf si l'inverse est spécifié).

Installation du paquet

Pour installer Gitosis, comme d'habitude, il n'y a rien de compliqué.

aptitude install gitosis

Cela va installer Gitosis lui-même mais aussi quelques dépendances telles que Git (logique).

Création de l'utilisateur système

Maintenant que l'on a Gitosis, on va créer l'utilisateur qui va se charger d'accéder aux dépôts.

adduser --system --shell /bin/sh --gecos 'git version control' --group --home /home/git git

Comme on peut le constater aucun mot de passe ne nous est demandé. Normal puisque l'authentification ne se fera que par clés SSH ce qui à mon humble avis préférable. Si le serveur SSH est configuré comme il se doit, il faut autorisé le login de l'utilisateur git. Pour cela, on édite le fichier /etc/ssh/sshd_config et on ajoute l'utilisateur git sur la ligne débutant par AllowUsers.

Initialisation de Gitosis

Pour initialiser Gitosis, il faut une clé publique SSH qui sera considérée comme la clé publique de l'administrateur des dépôts. On transfert donc notre clé publique mais surtout pas la clé privée, celle-ci doit rester bien au chaud sur la machine à laquelle elle est associée.

scp ${HOME}/.ssh/id_rsa.pub moi@mon-serveur.com:/tmp

On s'identifie avec l'utilisateur git et on initialise le gestionnaire de dépôts.

su - git
gitosis-init < /tmp/id_rsa.pub

Ceci va créer 2 répertoires nommés gitosis et repositories ce dernier contient le dépôt “gitosis-admin” qui servira à la configuration de Gitosis.

Configuration de Gitosis

Les actions ci-dessous ne sont pas à faire sur le serveur mais sur la machine dont on a envoyé la clé publique précédemment.

L'installation terminée, il faut maintenant penser à la configuration. Pour cela, il faut récupérer le dépôt “gitosis-admin” que nous venons d'initialiser. Hé oui, la configuration de Gitosis se fait par un dépôt Git.

On commence donc par récupérer le dépôt sur la machine locale.

git clone git@mon-serveur.com:gitosis-admin.git

Cela va alors créer un répertoire nommé gitosis-admin qui contient le fichier gitosis.conf ainsi que le répertoire keydir qui contient lui les clés publiques SSH.

En ouvrant le fichier gitosis.conf on doit voir quelque chose comme ceci.

[gitosis]
 
[group gitosis-admin]
writable = gitosis-admin
members = moi@chezmoi

Ceci signifie que l'utilisateur authentifié par la clé publique contenue par le fichier keydir/moi@chezmoi.pub peut accéder et modifier le dépôt “gitosis-admin”.

Créer un autre dépôt

Ici, nous allons voir la démarche pour créer un nouveau dépôt qui ne sera accessible dans un premier temps que par “moi@chezmoi”. On édite alors le fichier gitosis.conf récupéré précédemment et on ajoute :

[group test]
writable = test
members = moi@chezmoi

Et on envoie la nouvelle configuration de Gitosis sur le serveur.

git add gitosis.conf
git commit -m 'Ajout du dépôt test'
git push origin master

Enfin on peut tester la configuration en créant “réellement” le dépôt test puis en l'envoyant sur le serveur.

mkdir test && cd test
git init
git remote add origin git@mon-serveur.com:test.git
touch README && git add README
git commit -m 'Initialisation du dépôt test.'
git push origin master:refs/heads/master

Normalement cela doit fonctionner sans erreur.

Ajout d'un utilisateur

Vous l'aurez compris, l'ajout d'un utilisateur se fait par l'ajout de sa clé publique SSH puis en lui donnant l'accès aux dépôts voulus. On va alors dans le dépôt “gitosis-admin”, et on ajoute la clé SSH de l'utilisateur dans le répertoire keydir. La clé SSH doit être nommée comme ceci utilisateur@hôte.pub. On édite aussi le fichier gitosis.conf pour rajouter l'utilisateur sur les lignes débutants par members pour les dépôts auxquels on souhaite lui donner l'accès. On pourra donc avoir par exemple ceci :

[group test]
writable = test
members = moi@chezmoi toi@cheztoi

Enfin on envoie la nouvelle configuration au serveur.

git add .
git commit -m "Ajout d'un nouvel utilisateur au dépôt 'test'"
git push