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://myUser@mydomain.com/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

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.


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.


5

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


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: //myUser@mydomain.com/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$
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.