2009-08-28 23 views
12

Sto usando git per gestire un piccolo progetto. Ho eseguito tutte le mie transazioni (clone, push, pull, ecc.) Tramite SSH, ma di recente ho eseguito git-update-server-info perché volevo sperimentare l'esecuzione di git-clone su http. Ha funzionato alla grande. Freddo. Ora mi rendo conto che chiunque può clonare il mio repository su http senza alcuna credenziale. Sono vagamente consapevole dell'impostazione dell'autenticazione http tramite gitosis, ma in realtà non è quello che voglio. Preferirei semplicemente disabilitare completamente la clonazione http.Posso "disabilitare" git-clone su http?

C'è un modo che posso dire git per consentire solo le transazioni su ssh? O posso annullare ciò che ho fatto quando ho eseguito git-update-server-info per abilitare la clonazione su http in primo luogo?

+0

Con Git 2.12 (Q1 2017), si avrà 'git config protocol. .allow ... '. Vedi [la mia risposta sotto] (http://stackoverflow.com/a/41369667/6309) – VonC

risposta

14

Per repository git sia disponibile tramite il trasporto HTTP, ha bisogno di essere "esportate" di (qualsiasi) web server. Se il repository (per essere più precisi la sua directory .git) è visibile dall'esterno in un browser Web, può essere clonato o recuperato in modo anonimo tramite il protocollo HTTP. git update-server-info viene utilizzato per generare ulteriori informazioni sull'assistente ausiliario (.git/objects/info/packs e .git/info/refs) per clonare (o recuperare) per sapere cosa è disponibile.

Così che cosa dovete fare è a uno rimuovere quelle due file (.git/objects/info/packs e .git/info/refs), o semplicemente fare in modo il repository non è disponibile via web, magari cambiano i permessi in modo tale che l'utente che il web server funziona come (di solito "nessuno" o "www" o "apache") non ha accesso al repository .git. Oppure configurare il server Web in modo che non esporti (rendi visibile) il tuo repository.

Il protocollo HTTP è (attualmente) il cosiddetto protocollo "stupido", vale a dire che serve i file così come sono e il controllo degli accessi viene eseguito da un server [stupido], in questo caso dal server Web che si utilizza (o dal filesystem).

Immagino che il tuo repository non venga esportato dal server web, quindi non hai nulla di cui preoccuparti: il tuo repository non è disponibile via HTTP.

Si noti che è citazione usuale per repository Git di avere anonimo non autenticato accesso in sola lettura, e richiedono l'autenticazione solo per la scrittura al repository cioè spingere (almeno per progetti open-source)

+0

La mia directory .git/objects/info è già vuota e sto ancora avendo lo stesso problema. –

1

Elimina .git/objects/info/packs e .git/info/refs

+0

La mia directory .git/objects/info è già vuota e sto ancora avendo lo stesso problema. –

2

Esiste un come posso dire a git di permettere solo transazioni su ssh?

6 a 8 anni tardi, Git 2.12 (Q1 2017) proporrà una configurazione per consentire o disattivare un protocollo utilizzato da Git.

git config protocol.http.allow never 
git config protocol.https.allow never 
git config protocol.git.allow never 
git config protocol.file.allow never 

git config protocol.ssh.allow always 

Vedi commit abcbdc0 (14 Dicembre 2016) per Jeff King (peff).
Vedi commit a768a02, commit aeae4db, commit f1762d7, commit f962ddf, commit 85e4205 (14 dic 2016) da Brandon Williams (mbrandonw).
(fusa per Junio C Hamano -- gitster -- in commit 9d540e9 27 Dicembre 2016)

Questo permette un controllo più accurato di quello protocolli sono consentiti per il trasporto durante clone/recuperare/spinta sono stati abilitati tramite un nuovo meccanismo di configurazione .

git config ora include:

protocol.allow 

Se impostato, fornire un criterio predefinito definito dall'utente per tutti i protocolli che non hanno esplicitamente una politica (protocol.<name>.allow).
Per impostazione predefinita, se non impostato,

  • noti sicuri protocolli (http, https, git, ssh, file) hanno una politica di default di always,
  • noti pericolosa protocolli (ext) avere una politica di default di never e
  • tutti gli altri protocolli hanno una politica predefinita di user.

politiche di sostegno:

  • always - protocollo è sempre in grado di essere utilizzati.
  • never - il protocollo non può mai essere utilizzato.
  • user - protocollo è in grado di essere utilizzato quando GIT_PROTOCOL_FROM_USER è o disinserire o ha un valore pari a 1.
    Questa politica dovrebbe essere usato quando si vuole un protocollo di essere direttamente utilizzabile dall'utente solo, ma non lo voglio usato da comandi che eseguono comandi clone/fetch/push senza input dell'utente, es inizializzazione del sottomodulo ricorsivo.
+0

Non cambierò la risposta, ma apprezzo che tu abbia aggiunto queste informazioni! Buono a sapersi. –

+0

@GeorgeMandis Nessun problema. Non è ancora stato rilasciato comunque. – VonC

Problemi correlati