Git
Chapters ▾ 2nd Edition

4.6 Git on the Server - Akıllı HTTP

Akıllı HTTP

Ş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.

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

scroll-to-top