Pour limiter les actions d'un utilisateur Git propose un "shell restreint" appelé "git-shell".
Il permet d'exécuter uniquement des actions Git sur le serveur.
Seules les commandes suivantes peuvent être exécutées via git-shell :
- git receive-pack <argument>
- git upload-pack <argument>
- git upload-archive <argument>
ce qui permet au client Git de réaliser les opérations suivantes :
- git push
- git fetch
- git archive
Vérification de "git-shell"
L'objectif est de remplacer le shell standard de certains utilisateurs ("bash", "sh", etc) par "git-shell".
"git-shell" doit donc être installé sur le serveur (ce qui doit être le cas, il est fourni avec git)
et faire partie de la liste des "shells" utilisables.
Vérifier que git-shell est bien installé sur le serveur :
$ which git-shell
/usr/bin/git-shell
ou
$ command -v git-shell
/usr/bin/git-shell
Lorsqu'on exécute "git-shell" il affiche le message suivant :
fatal: Interactive git shell is not enabled.
Ce qui est normal puisque "git-shell" n'est pas un "shell interactif"
Vérifier que "git-shell" fait partie de la liste des shells utilisables
$ cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
Pour l'ajouter :
$ su
$ vi /etc/shells
Ajouter le path complet ( par exemple "/usr/bin/git-shell" )
Mise en place de "git-shell" pour un utilisateur
$ chsh -s /usr/bin/git-shell
Password:
A partir de maintenant l'utilisateur n'a plus de "shell interactif",
toute tentative de "login" sera refusée.
Lorsqu'il tentera de se connecter via SSH le serveur affichera le message suivant :
fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute acc
Un "su user-name" n'est donc plus possible non plus.