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.
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).
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.
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.
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”.
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.
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