Gitolite
Updated 6 Mai 2019
Gitolite permet de gérer facilement vos dépôts Git depuis un seul compte utilisateur. L'accès utilisateur aux dépôts est géré par des clés SSH+. Gitolite permet une grande souplesse d'accès aux dépôts, en en gérant plusieurs associés à un seul compte utilisateur, et en utilisant des clés SSH pour l'authentification. Les utilisateurs finaux ne doivent pas avoir de compte sur le serveur, car ils seront connectés via un seul compte partagé, ce qui leur évitera d'exécuter des commandes non-autorisées.
Note
Le présent article est basé sur l'utilisation du client Git sous Windows.
Installer Gitolite
Pour installer Gitolite, exécutez :
emerge -a dev-vcs/gitolite
Une fois l'installation terminée, le compte git+ sera créé, accessible sans mot de passe. /var/lib/gitolite/ sera son répertoire personnel.
Configurer Gitolite
Créer les clés pour root :
ssh-keygen -t rsa
Deux fichiers seront créés :
- /root/.ssh/id_rsa.pub clé publique
- /root/.ssh/id_rsa clé privée
Créer un dépôt contenant les paramètres
Copiez la clé publique :
cp /root/.ssh/id_rsa.pub /tmp/id_rsa.pub
Initialiser Gitolite
Compléter la configuration en tant qu'utilisateur git
su git
cd
gitolite setup -pk /tmp/id_rsa.pub
exit
Note
La touche -pk+ permet d'effacer les données de la configuration précédente de Gitolite, si elles étaient disponibles à l'époque.
Supprimez la copie temporaire de la clé publique :
rm /tmp/id_rsa.pub
Si vous comptez utiliser GitWeb, modifiez les permissions du répertoire, afin que le dépôt de configuration soit invisible en ligne :
chmod 700 /var/lib/gitolite/repositories/gitolite-admin.git
Configurer le dépôt utilisateur
Copiez le dépôt de configurations dans ~/tmp/gitolite-admin~~ :
git clone git@имя_сервера:gitolite-admin.git /tmp/gitolite-admin
Accédez au répertoire dans lequel les paramètres sont stockés :
cd /tmp/gitolite-admin
Copiez la clé publique de ~gituser~~ dans /tmp/gitolite-admin/keydir de la manière qui vous convient, par exemple en utilisant la commande scp
pour une copie sécurisée des fichiers :
scp root@userhostname:/home/gituser/.ssh/id_rsa.pub ./keydir/gituser.pub
Note
Le nom du fichier de clé publique du client dans /tmp/gitolite-admin/keydir est également celui de l'utilisateur sur Gitolite.
Configurez un nouveau dépôt, ~projet1, qui appartient à gituser~~ :
/tmp/gitolite-admin/conf/gitolite.conf
repo gitolite-admin RW+ = id_rsa repo project1 RW+ = gituser
Les droits d'accès peuvent être indiqués comme suit :
"R" - lecture seule
"RW" - lecture et commits autorisés, rewind non autorisé (push --force)
"RW+" - plein accès
"RWC" - autorisé à créer une branche
"RWC" - autorisé à supprimer une branche
"-" - accès en écriture refusé
Accessible :
"master@"" - branches
"ref/tags" - balises ou versions
"NOM/nom_du_fichier" - noms de fichiers ou de répertoires
Pour créer un groupe, utiliser la syntaxe suivante :
" @nom_groupe " = utilisateur1 utilisateur2 utilisateur3
La même syntaxe est utilisée pour faire des groupes de branches :
@branches_importantes = master$ developer$ test$
repo testing
RW @branches_importantes = @nom_de_groupe
- @importantbranches = @groupname
RW+ = @nom_de_groupe
Modifiez et sauvegardez :
git commit -am "Granted full access for gituser@remotehost to project1""
git push origin master
Créer un nouveau dépôt
Sur Gitolite, il n'est pas nécessaire de créer un dépôt avec --bare init en premier, il suffit de l'indiquer dans le fichier de configuration. Le dépôt sera accessible à l'utilisateur sur son PC avec une clé publique SSH, c'est-à-dire qu'il ne sera pas protégé par un mot de passe :
git clone ssh://git@nom_du_serveur/project1.git
Vérifier sshd
sshd [ started ]
git+ doit avoir un accès SSH :
/etc/ssh/sshd_config
AllowUsers git
Configurer le démon Git
/etc/conf.d/git-daemon
GITDAEMON_OPTS="--syslog --port=9418 --reuseaddr --base-path=/var/lib/gitolite/repositories/ --export-all" GIT_USER="apache"
Note
Si le redémarrage échoue, remplacez le numéro de port --port=9418 par un autre numéro, relancez git-daemon, modifiez-le à nouveau et relancez git-daemon encore une fois.
Créer une clé utilisateur privée sous Linux
Connecté comme utilisateur sur l'ordinateur de ce dernier, exécutez la commande suivante :
ssh-keygen -t rsa
Deux fichiers seront créés dans le répertoire ~/.ssh :
- id_rsa - clé privée
- id_rsa.pub - clé publique
Si la clé publique est stockée dans le répertoire keys+ du dépôt de configuration Gitolite sur le serveur, et si conf/gitolite.conf a été modifié afin d'autoriser l'accès aux dépôts, l'utilisateur se verra accorder cet accès.
Créer une clé pour les utilisateurs Windows
Pour créer une clé RSA privée, utilisez ssh-keygen.exe
, intégré dans l'environnement MinGW32.
Deux fichiers seront créés en conséquence dans C:\Users\username.ssh :
- id_rsa - clé privée
- id_rsa.pub - clé publique
Important
Ne renommez pas les clés privées et publiques SSH, car MinGW32 + Git-2.6.3 (32 bits) ne fonctionnent qu'avec une clé nommée id_rsa.
Configurer l'accès aux fichiers du dépôt
En sauvegardant les fichiers du dépôt, Gitolite les attribue à l'utilisateur et au groupe git+. Les autorisations sont définies par le paramètre UMASK dans /var/lib/gitolite/.gitolite.rc. Cela peut être important si le démon Git ne démarre pas sous l'utilisateur git+.
Exemples de droits d'accès au dépôt
Autorisez le groupe developers à disposer pleinement du dépôt, sauf à modifier la branche master :
conf/gitolite.conf
repo myrep - master$ = @developers RW+ = @developers
Désactivez le rewind pour master (cette règle signifie que le groupe @developer ne peut faire de commit que sur la branche master) :
conf/gitolite.conf
repo myrep RW master$ = @developers
Autorisez le groupe developers à disposer pleinement du dépôt, sauf à créer des tags (seul maindeveloper peut le faire) :
conf/gitolite.conf
repo myrep RW+ refs/tags = maindeveloper - refs/tags = @developers RW = developers