Comment faire un dépôt git en lecture seule?

j'ai des dépôts git accessibles à distance par SSH et je veux en faire certains en lecture seule pour éviter d'autres pressions. Certaines personnes ont des télécommandes pointant vers ces dépôts.

ces dépôts nus ont été initialisés --shared=group , donc définir les permissions de fichiers à 660 pour tous les fichiers est-il suffisant pour permettre l'accès SSH, mais interdire les Écritures? Ou est-il un moyen plus facile?

santé.

43
demandé sur SilentGhost 2009-11-02 19:13:49

7 réponses

Il n'y a plus d'une façon de le faire.

  • si vos utilisateurs ont chacun un compte shell (peut-être limité), et que chacun d'eux accède à des dépôts git via son propre compte, vous pouvez utiliser permissions du système de fichiers pour contrôler l'accès SSH aux dépôts git. Sur Unix ce serait les permissions d'écriture sur répertoires , peut-être avec l'aide de créer un groupe et spécifique les autorisations d'un groupe (avec "collante ID de groupe" ensemble).

  • Pousser exige git-receive-pack $CHEMIN d'accès de l'utilisateur, et d'être exécutable... bien que je ne sois pas certain de la faisabilité de cette approche.

  • vous pouvez utiliser update ou pre-receive hook pour effectuer le contrôle d'accès au dépôt, par exemple en utilisant update-paranoid exemple de crochet de contrib/hooks dans git sources.

  • avec un plus grand nombre d'utilisateurs , vous pourriez être mieux d'utiliser un outil pour gérer l'accès aux dépôts git , comme Gitosis (en Python, nécessite des outils de setuptools) ou Gitolite (en Perl).

  • pour accès en lecture seule, vous pouvez configurer git daemon fournir un accès en lecture seule anonyme (et non authentifié) via le protocole git:// , au lieu d'un accès via le protocole SSH.

    voir la documentation pour la variable de configuration url.<base>.insteadOf pour une façon de faciliter la transition de SSH au protocole GIT.


voir également le Chapitre 4. " Git sur le Serveur " Pro Git livre de Scott Chacon (titulaire D'une licence CC-BY-NC-SA).

40
répondu Jakub Narębski 2015-02-16 19:28:03
chmod -R a-w /path/to/repo.git
9
répondu Pat Notz 2009-11-02 16:44:03

Un pre-receive crochet qui imprime simplement un message d'information et retourne une valeur non nulle est le statut de l'emploi.

en supposant que vous mettez quelques informations significatives dans votre message, il réduit également les requêtes des utilisateurs frustrés demandant pourquoi ils ne peuvent pas pousser:

#!/bin/bash
echo "=================================================="
echo "This repository is no longer available for pushes."
echo "Please visit blah blah yadda yadda ...."
echo "=================================================="
exit 1
8
répondu Dale Anderson 2016-10-26 00:24:26

puisque git s'appuie principalement sur le système de fichiers pour le contrôle d'accès, cela fonctionnera. Notez que dans vos autorisations, le monde n'a pas accès au dossier, mais l'utilisateur et de groupe ont accès en lecture/écriture. Si vous voulez une lecture universelle, vos permissions doivent être 0444 .

vous pouvez faire un contrôle plus précis en définissant les permissions de repos comme 0664 où l'utilisateur est nobody et le groupe est quelque chose comme gitdevs . Alors, seulement les gens dans le groupe gitdevs aura la capacité d'écrire au repo, mais le monde peut lire à partir de lui.

Follow-up voici un lien qui couvre diverses façons de partager votre mise en pension et couvre les fonctions de pro & cons et de contrôle d'accès.

3
répondu jheddings 2009-11-02 22:58:02

si vous avez également besoin de contrôle d'accès, consultez gitosis . Assez facile à configurer et vous pouvez utiliser un script simple pour contrôler qui peut faire quoi.

1
répondu Makis 2009-11-02 16:38:37

une autre possibilité est le protocole git, mais il nécessite l'exécution du démon git.

0
répondu Ikke 2009-11-02 16:34:55

Récemment, j'ai utilisé la limitation de l'accès au chemin "/repo.git / git-receive-pack" pour obtenir le résultat que le dépôt est en lecture-écriture pour certains utilisateurs et en lecture seule pour d'autres. Dans httpd config il ressemble à ceci:

    <Location /repo.git/>
            Require group developers developers-ro
    </Location>

    <Location /repo.git/git-receive-pack>
            Require group developers
    </Location>
0
répondu keypress 2017-04-10 13:01:28