Utilisation de Gitolite

Gitolite permet de gérer de manière simplifiée les dépôts Git et notamment les droits des utilisateurs.

Installation de Gitolite

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

Utilisation de Gitolite

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.

Gestion des droits des différents dépôts

Il existe 3 choix possibles pour définir les droits d’un dépôt Git via Gitolite :

  • R : L’utilisateur associé a un accès en lecture seule
  • RW : L’utilisateur associé a un accès en lecture et écriture
  • RW+ : L’utilisateur associé a un accès de type “administrateur” (il peut également supprimer des anciens commits)

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

Specificité de l’utilisation avec Gitlist

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 :

  • soit on exécute la commande chown -R git:www-data repositories
  • soit on exécute la commande chown -R git: repositories puis on ajoute www-data dans le groupe de git via usermod -aG git www-data.