====== 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