Şimdi hem SSH üzerinden kimlik doğrulamalı erişim hem de git://
üzerinden kimlik doğrulamasız erişimimiz var, ancak aynı anda her ikisini de yapabilen bir protokol de bulunmaktadır.
Akıllı HTTP’yi kurmak temel olarak sunucuda Git ile birlikte gelen git-http-backend
adlı bir CGI betiğini etkinleştirmektir.
Bu CGI bir git fetch
veya git push
'un bir HTTP URL’sine gönderdiği dizin ve başlıkları okur ve istemcinin HTTP üzerinden iletişim kurup kuramayacağını belirler (1.6.6 sürümünden itibaren tüm istemciler için doğrudur).
CGI istemcinin akıllı olduğunu görürse onunla akıllı iletişim kurar, aksi takdirde (daha eski istemcilerle geriye dönük uyumluluk için) aptal davranışa geri döner.
Hadi şimdi çok temel bir kurulumu inceleyelim. Bunu Apache’yi CGI sunucusu olarak kullanarak yapacağız. Eğer Apache kurulumunuz yoksa, Linux üzerinde şöyle bir şey yapabilirsiniz:
$ sudo apt-get install apache2 apache2-utils
$ a2enmod cgi alias env
Bu aynı zamanda bunun düzgün çalışabilmesi için gereken mod_cgi
, mod_alias
ve mod_env
modüllerini de etkinleştirir.
Ayrıca, /srv/git
dizinlerinin Unix kullanıcı grubunu www-data
olarak ayarlamanız gerekecektir.
Böylece web sunucunuz repoları okuma ve yazma erişimine sahip olabilir, çünkü CGI betiğini çalıştıran Apache örneği (varsayılan olarak) bu kullanıcı olarak çalışacaktır:
$ chgrp -R www-data /srv/git
Şimdi, Apache yapılandırmasına bazı şeyler ekleyelim ki git-http-backend
'i web sunucunuzun /git
dizinine gelen her şey için işleyici olarak çalıştırsın.
SetEnv GIT_PROJECT_ROOT /srv/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/
Eğer GIT_HTTP_EXPORT_ALL
ortam değişkenini çıkartırsanız, Git (tam olarak Git daemon’ın yaptığı gibi) yalnızca git-daemon-export-ok
dosyasına sahip olan repoları kimlik doğrulamasız istemcilere sunacaktır.
Son olarak, Apache’ye git-http-backend
'e olan isteklere izin vermesini ve yazma işlemlerinin bir şekilde kimlik doğrulanmasını yapmasını isteyeceksiniz, muhtemelen şu şekilde bir Auth bloğu ile:
<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>
Bu geçerli tüm kullanıcıların şifrelerini içeren bir .htpasswd
dosyası oluşturmanızı gerektirecektir.
İşte dosyaya bir schacon
kullanıcısı eklemenin bir örneği:
$ htpasswd -c /srv/git/.htpasswd schacon
Apache’in kullanıcıların kimliğini doğrulaması için birçok yöntemi bulunmaktadır, bunlardan birini seçip uygulamanız gerekecektir. Bulabildiğimiz en basit örnek budur. Ayrıca muhtemelen tüm bu verilerin şifrelenmesi için bunu SSL üzerinden kurmak isteyeceksiniz.
Apache yapılandırma detaylarına fazla girmek istemiyoruz, çünkü muhtemelen farklı bir sunucu kullanıyor olabilirsiniz veya farklı kimlik doğrulama ihtiyacınız olabilir.
Fikir, Git’in çağrıldığında HTTP üzerinden veri gönderme ve alma işlemlerini yürütecek git-http-backend
adlı bir CGI ile birlikte gelmesidir.
Kendi başına kimlik sormaz, ancak kendini çağıran web sunucu katmanında kolayca kontrol edilebilir.
Bu neredeyse CGI yetenekli her web sunucusuyla yapılabilir, bu nedenle en iyi bildiğiniz sunucu ile devam edin.
Note
|
Apache’de kimlik doğrulama yapılandırması hakkında daha fazla bilgi için Apache kılavuzunu buradan kontrol edebilirsiniz: https://httpd.apache.org/docs/current/howto/auth.html |