Έχετε πλέον ταυτοποιημένη πρόσβαση μέσω SSH και μη-ταυτοποιημένη πρόσβαση μέσω του git://
, αλλά υπάρχει και ένα πρωτόκολλο που μπορεί να κάνει και τα δύο ταυτόχρονα.
Η εγκατάσταση του έξυπνου HTTP βασικά απλά ενεργοποιεί ένα script CGI, που παρέχεται με τον Git και ονομάζεται git-http-backend
, στον διακομιστή.
Αυτό το CGI θα διαβάσει τη διαδρομή και τις κεφαλίδες που θα σταλούν με git fetch
ή git push
σε μια διεύθυνση URL HTTP και θα καθορίσει εάν ο πελάτης μπορεί να επικοινωνήσει μέσω HTTP (κάτι που ισχύει για όλους τους πελάτες από την έκδοση 1.6.6 και μετά).
Αν το CGI διαπιστώσει ότι ο πελάτης είναι έξυπνος, θα επικοινωνήσει μαζί του έξυπνα, αλλιώς θα επανέλθει στη χαζή συμπεριφορά (συνεπώς έχει προς-τα-πίσω συμβατότητα για ανάγνωσεις με τους παλαιότερους πελάτες).
Ας δούμε αναλυτικά μία πολύ βασική ρύθμιση. Θα υποθέσουμε ότι ο διακομιστής CGI είναι ο Apache. Αν δεν έχετε Apache, μπορείτε να το κάνετε σε ένα κουτί Linux με κάτι σαν αυτό:
$ sudo apt-get install apache2 apache2-utils
$ a2enmod cgi alias env
Αυτό ενεργοποιεί επίσης τις λειτουργικές μονάδες (modules) mod_cgi
, mod_alias
και mod_env
, που είναι απαραίτητες για να λειτουργήσει σωστά όλο αυτό.
Θα πρέπει επίσης να ορίσετε την ομάδα χρηστών Unix φακέλων /srv/git
σε www-data
, ώστε ο web server να έχει πρόσβαση ανάγνωσης και εγγραφής στα αποθετήρια, διότι ο Apache που τρέχει το script CGA θα τρέχει εξ ορισμού ως ο χρήστης:
$ chgrp -R www-data /srv/git
Στη συνέχεια πρέπει να προσθέσουμε κάποια πράγματα στην παραμετροποίηση του Apache για να εκτελέσετε το git-http-backend
ως τον handler για οτιδήποτε μπαίνει στη διαδρομή /git
του web server σας.
SetEnv GIT_PROJECT_ROOT /srv/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/
Εάν παραλείψετε τη μεταβλητή περιβάλλοντος (environment variable) GIT_HTTP_EXPORT_ALL
, τότε το Git θα εξυπηρετεί σε μη-ταυτοποιημένους πελάτες μόνο τα αποθετήρια που περιέχουν το αρχείο` git-daemon-export-ok
, ακριβώς όπως έκανε και ο δαίμονας Git.
Στη συνέχεια θα πρέπει να πείτε στο Apache να επιτρέψει αιτήματα στο git-http-backend
και να ταυτοποιεί με κάποιον τρόπο τις εγγραφές με ένα μπλοκ Auth σαν αυτό:
<Files "git-http-backend">
AuthType Basic
AuthName "Git Access"
AuthUserFile /srv/git/.htpasswd
Require expr !(%{QUERY_STRING} -strmatch '*service=git-receive-pack*' || %{REQUEST_URI} =~ m#/git-receive-pack$#)
Require valid-user
</Files>
Αυτό προϋποθέτει την ύπαρξη ενος αρχείου .htpasswd
που περιέχει τους κωδικούς πρόσβασης όλων των έγκυρων χρηστών.
Να ένα παράδειγμα προσθήκης του χρήστη “schacon” στο αρχείο :
$ htpasswd -c /srv/git/.htpasswd schacon
Τέλος, θα θελήσετε να κάνετε τις εγγραφές να πιστοποιούνται με κάποιον τρόπο, πιθανώς με ένα μπλοκ Auth όπως αυτό:
<LocationMatch "^/git/.*/git-receive-pack$">
AuthType Basic
AuthName "Git Access"
AuthUserFile /srv/git/.htpasswd
Require valid-user
</LocationMatch>
Υπάρχουν πάρα πολλοί τρόποι με τους οποίους μπορείτε να ζητήσετε από τον Apache να ταυτοποιεί χρήστες, θα πρέπει να επιλέξετε έναν και να τον υλοποιήσετε. Αυτό είναι το απλούστερο παράδειγμα που μπορέσαμε να σκεφτούμε. Είναι σχεδόν βέβαιο ότι θα θέλήσετε να το εγκαταστήσετε πάνω από SSL, ώστε όλα αυτά τα δεδομένα να είναι κρυπτογραφημένα.
Δεν θέλουμε να μπούμε πολύ βαθιά στις ρυθμίσεις του Apache, καθώς ενδεχομένως χρησιμοποιείτε διαφορετικό διακομιστή ή έχετε διαφορετικές ανάγκες ταυτοποίησης.
Η βασική ιδέα είναι ότι το Git έρχεται με ένα CGI που ονομάζεται git-http-backend
που όταν καλείται θα κάνει όλες τις διαπραγματεύσεις για αποστολή και λήψη δεδομένων μέσω HTTP.
Δεν υλοποιεί το ίδιο την ταυτοποίηση, αλλά αυτό μπορεί εύκολα να ελεγχθεί στο επίπεδο του web server που τον καλεί.
Μπορείτε να κάνετε τα παραπάνω με σχεδόν οποιοδήποτε web server με δυνατότητα CGI, οπότε χρησιμοποιήστε αυτόν που γνωρίζετε καλύτερα.
Note
|
Περισσότερες πληροφορίες σχετικά με την παραμετροποίηση της ταυτοποίησης στον Apache, υπάρχουν στην τεκμηρίωση του Apache στην http://httpd.apache.org/docs/current/howto/auth.html |