Gitolite permet de gérer de manière simplifiée les dépôts Git et notamment les droits des utilisateurs.
On commence par créer l’utilisateur Git sur le serveur :
useradd -m git
passwd git
Cet utilisateur nous servira à effectuer toutes les tâches liées à Git (clone, push, …). Nous allons ensuite copier notre clé ssh publique sur le serveur afin que nous puissions nous connecter sur le serveur en tant que Git .
scp .ssh/id_rsa.pub root@git.djeeks.com:/tmp/djeeks.pub
Attention : Il est important que le fichier .ssh/authorized_keys de l’utilisateur Git soit vide.
Pour installer Gitolite, nous allons utiliser la version qui se trouve sur GitHub, la version de Debian n’étant pas systématiquement à jour. Il faut donc installer Git pour pouvoir cloner le dépôt :
apt install git perl
Ensuite, on bascule sur l’utilisateur Git pour cloner le dépôt officiel et démarrer l’installation :
su git
cd
git clone git://github-.com/sitaramc/gitolite
mkdir ~/bin
~/gitolite/install -to ~/bin
Pour terminer l’installation, on définit l’utilisateur de notre machine locale en tant qu’administrateur du dépôt Git :
~/bin/gitolite setup -pk /tmp/djeeks.pub
Pour ajouter de nouveau dépôts ou de nouveaux utilisateurs, il faut utiliser le dépôt gitolite-admin. Pour cela, on récupère le projet sur notre machine locale (via un clone) :
git clone git@git.djeeks.com:gitolite-admin
cd gitolite-admin
Ensuite, il faut modifier le fichier gitolite.conf qui se trouve dans le dossier conf : vi conf/gitolite.conf afin qu’il ressemble à ça :
repo gitolite-admin
RW+ = djeeks
#On peut supprimer ce dépôt créé par défaut
repo testing
RW+ = djeeks
repo nouveau_depot
RW+ = djeeks test_user
Si de nouveaux utilisateurs sont définis, il faut ajouter leur clé publique SSH dans le dossier keydir.
Afin de valider nos modifications, il suffit de les commiter et de les pusher sur le serveur :
git add *
git commit -am "Ajout des utilisateurs et du dépôt de base"
git push
Lorsque les modifications sont pusher sur le serveur, les nouveaux dépôts (ici nouveau_depot) sont automatiquement créés (on ne doit plus utiliser les commandes git init
ou git --bare init
). Les utilisateurs sont également ajouter automatiquement. On ne doit pas modifier le fichier authorized_keys de l’utilisateur Git à la main.
Il existe 3 choix possibles pour définir les droits d’un dépôt Git via Gitolite :
Pour simplifier la gestion des droits, on peut également créer des groupes d’utilisateurs. Pour cela, il suffit d’ajouter la ligne suivante dans le fichier conf/gitolite.conf
:
@nom_du_groupe = utilisateur1 utilisateur2 utilisateur3
Lorsqu’on souhaite faire appel à un groupe pour définir les droits d’un dépôt, il ne faut pas oublier l’arobase :
repo nouveau_depot
RW+ = @dev
Gitlist est une interface web qui permet de voir les projets Git un peu à la manière de GitHub.
Les pages de Gitlist sont distribuées par le serveur web. Par défaut, il est exécuté avec l’utilisateur www-data. Il faut donc que cet utilisateur ait les droit en lecture seule, afin de pouvoir afficher les pages. Il est important que www-data ne puisse pas écrire dans les fichiers des dépôts Git afin de ne pas les supprimer par exemple. Les autres utilisateurs n’auront pas accès aux fichiers Git.
Pour cela, on définit donc les droits à 750 pour les dossiers et 640 pour les fichiers. Il faut donc modifier la valeur d’UMASK qui était à 077. On édite donc le fichier .gitolite.rc
:
UMASK => 0027,
Afin également de s’assurer que les dépôts et fichiers déjà créés disposent des mêmes droits, il faut exécuter les deux commandes suivantes :
find repositories -type d -exec chmod 750 {} \;
find repositories -type f -exec chmod 640 {} \;
Enfin, pour définir le propriétaire des des dépôts, on peut donc utiliser deux méthodes :
chown -R git:www-data repositories
chown -R git: repositories
puis on ajoute www-data dans le groupe de git via usermod -aG git www-data
.