Créer un utilisateur SSH avec des privilèges limités pour utiliser uniquement le référentiel Git

12

J'ai un référentiel git hébergé sur mon serveur SunOS, que j'utilise à distance via ssh

git clone ssh://[email protected]/path/to/git

Maintenant, je dois ajouter plus d'utilisateurs pour pouvoir accéder à ce référentiel, mais je ne sais pas comment.

J'ai ajouté un testUser à ssh, mais je n'arrive pas à limiter les privilèges utilisateur pour n'utiliser que git.

testUser est capable de parcourir et de parcourir l'ensemble du serveur.

Comment puis-je créer des utilisateurs qui ne peuvent accéder à git qu'à distance, pour cloner / tirer / pousser etc ...

Merci

Bach
la source

Réponses:

12

Vous pouvez envisager d'utiliser gitolite sous un seul utilisateur au lieu de configurer plusieurs utilisateurs git-shell (et les autorisations de groupe et de groupe requises afin qu'ils puissent partager l'accès aux référentiels).

gitolite s'exécute sous un seul utilisateur normal sur le serveur et utilise des clés publiques SSH pour différencier l'accès aux référentiels Git (voir « comment gitolite utilise ssh » pour certains détails sur la façon dont gitolite fait son identification basée sur SSH). gitolite offre un contrôle d'accès par référentiel, par branche et même par chemin d'accès.

Chris Johnsen
la source
1
+1 pour la gitose ... Il a été fait exactement pour cette configuration.
Jeremy Bouse
12

Vous avez essentiellement deux options.

  1. Comme indiqué par topdog, lorsque vous créez des utilisateurs sur le serveur, définissez leur shell sur git-shell ( entrée de livre ici ). Cela permettra à l'utilisateur de se connecter via SSH, mais au lieu d'exécuter un shell normal et complet (par exemple sh, bash, etc.), il s'exécutera, git-shell, qui ne donne accès qu'à la fonctionnalité git.

  2. Alternativement, vous pouvez rendre vos référentiels disponibles via un autre protocole, tel que TCP (en utilisant git-deamon ) ou HTTP / HTTPS. Je ne recommanderais cependant qu'un tel scénario pour un accès en lecture seule.

Vous mentionnez vouloir prendre en charge la fonctionnalité «push» pour vos utilisateurs, vous devriez donc vraiment choisir l'option # 1.

chuckx
la source
5

vous devez changer leur shell en git-shell, qui ne leur donnera accès qu'aux fonctions git.

topdog
la source
Merci topdog. Fondamentalement, l'utilisateur utilisera son propre shell git sur son Mac. Je ne veux pas vraiment qu'il puisse ssh vers le serveur. Donc, si le dépôt git se trouve sur mydomain.com depuis l'ordinateur testUser / Mac, dans le terminal, il pourrait simplement git cloner ssh: //[email protected]/path/to/git être invité à entrer son mot de passe, puis télécharger le dépôt. Je viens d'essayer maintenant de définir son shell sur git-shell. Il vous invite lors de l'appel du clone mais le mot de passe est rejeté.
Bach
vous devez définir le shell myUsers sur git-shell si tout ce que vous voulez qu'ils fassent sur le serveur est d'exécuter des commandes git et de ne pas pouvoir le shell. pour les invites de mot de passe, veuillez utiliser des clés. Pour une couverture plus détaillée de git sur un serveur, consultez le livre gratuit git progit.org/book/ch4-0.html
topdog
merci pour la référence du livre! très utile. J'ai fini par utiliser de la gitolite, mais j'ai toujours des problèmes avec la configuration.
Bach
git-shell : "Il s'agit d'un shell de connexion permettant aux comptes SSH de fournir un accès Git restreint. Il autorise l'exécution uniquement des commandes Git côté serveur implémentant la fonctionnalité pull / push, ainsi que des commandes personnalisées présentes dans un sous-répertoire nommé git-shell-commandes dans le répertoire personnel de l'utilisateur. " Sous Linux, ajoutez "/ bin / git-shell" à "/ etc / shells" puis "usermod --shell / bin / git-shell $ USER". Btw, le git book est maintenant sur git-scm.com/book/en/ch4-0.html
David Tonhofer
0

Une autre façon de le faire est de limiter l'accès des utilisateurs dans ssh.

( http://prefetch.net/blog/index.php/2006/09/05/limiting-access-to-openssh-directives/ )

L'exemple est simplement en utilisant un seul utilisateur, mais si les utilisateurs sont sur le même groupe, vous pouvez les filtrer en utilisant la directive group. Quelque chose comme

AllowTcpForwarding yes
X11Forwarding yes

Match Group Users
         AllowTcpForwarding no
         X11Forwarding no
         $Here is a directive for git$
Nikolaidis Fotis
la source