Apaš zasnovan server

Uvod

Najfleksibilniji od svih mogućih server podešavanja za Subverziju je Apaš zasnovani server. Mada je malo komplikovaniji za podešavanje on pruža pogodnosti koje drugi serveri nemaju:

VebDAV

Apaš zasnovan Subverzioni server koristi VebDAV protokol koji je dobro podržan sa mnogo drugih programa. Mogli biste npr. postaviti spremište kao „Veb imenik/quote> u Vindouz eksploreru i da mu pristupate kao svakom drugom imeniku fajl sistema.

Pretraživanje spremišta

Možete dovesti vaš pretraživač na URL spremišta i pretraživati njegov sadržaj bez instaliranog Subverzionog klijenta. Ovo daje pristup vašim podacima mnogo širem krugu korisnika.

Autentikacija

Možete koristiti mehanizam autentikacije podrške Apašu, uključujući SSPI i LDAP.

Sigurnost

Kako je Apaš veoma stabilan i siguran, vi automatski dobijate istu sigurnost za spremište. Ovo obuhvata SSP šifrovanje.

Instaliranje Apaša

Prva svar koja vam je potrebna pre instaliranja Apaša je kompjuter sa Vindouz 2000, Vindouz XP+SP1, Vindouz 2003, Vista ili Server 2008.

Upozorenje

Molim vas imajte u vidu da Vindous XP bez servis paketa 1 dovodi do veštačkih mrežnih podataka tako da će pokvariti spremište.

  1. Skinite zadnju verziju Apaš veb servera sa http://httpd.apache.org/download.cgi.Budite da skidate verziju 2.2.x - verzija 1.3.xx ne radi!

    Msi instalacija za Apaš može se naći klikom na ostali fajlovi , zatim pretražite do binariešwin32.Možda biste želeli da izaberete msi fajl apache-2.2.x-win32-x86-openssl-0.9.x.msi (onaj koji obuhvata OpenSSL).

  2. Jednom kada imate Apaš2 instaliran možete dvostruko kliknuti na njega i on će vas voditi kroz instalacioni proces. Budite sigurni da unesete server-URL korektno (ako nemate DNS ime vašeg servera samo upišite IP-adresu). Preporučujem da instalirate Apaš za sve korisnike, na Portu 80,kao Servis . Pažnja: ako već imate IIS ili neki drugi program koji radi i čita na portu 80 instalacija može biti neuspešna. Ako se to desi idite na programski imenik \Apache Group\Apache2\conf i nađite fajl httpd.conf. Uredite taj fajl tako da Listen 80 bude izmenjeno na slobodan port, npr. Listen 81. Zatim restartujte instalaciju - ovog puta će završiti bez problema.

  3. Sada testirajte da li Apaš veb server radi ispravno upravljajući veb pretraživač na http://localhost/ - prekonfigurisan vebsajt treba da bude prikazan.

Upozorenje

Ako odlučite da instalirate Apaš kao servis, znajte da tada uobičajeno radi kao sistem lokalnog rčuna. Bila bi sigurnija praksa za vas da kreirate poseban račun za rad kao Apaš.

Budite sigurni da taj račun na serveru gde radi Apaš ima eksplicitan ulaz pristupu imenika kontrolne liste spremišta (desni klik imenik | osobine | sigurnost), sa punom kontrolom. Drugim rečima, korisnik neće biti sposoban da ureže svoje izmene.

Čak i ako Apaš radi kao lokalni sistem, vi još imate potrebu za takvim ulazom (koja bi imala SISTEM račun u ovom slučaju).

Ako Apaš nema podešenu ovu dozvolu, vaši korisnici će dobiti „Pristup zabranjen“ poruku greške, koja je prikazana u Apaš dnevniku kao greška 500.

Instaliranje Subverzije

  1. Skinite zadnju verziju Subverzije Vin32 binarije za Apaš. Budite sigurni da ste dobili ispravnu verziju za integraciju sa vašom verzijom Apaša, u suprotnom će te dobiti čudne poruke greške kada probate sa restartom. Ako imate Apaš 2.2.x idite na http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=8100.

  2. Pokrenite Subverzionu instalaciju i pratite instrukcije. Ako instalacija Subverzije prepozna da ste instalirali Apaš onda je u redu. Ako ne nađe Apaš server morate uraditi neke dodatne korake.

  3. Koristeći vindouz pretraživač idite na instalacioni imenik Subverzije (obično c:\program files\Subversion) i nađite fajlove /httpd/mod_dav_svn.so i mod_authz_svn.so. Kopirajte ove fajlove u Apaš imenik modula (obično c:\program files\apache group\apache2\modules ).

  4. Kopirajte fajl /bin/libdb*.dll i /bin/intl3_svn.dll iz Subverzijinog instalacionog imenika u Apaš bin imenik.

  5. Uredite Apaš konfiguracioni fajl (obično C:\Program Files\Apache Group\Apache2\conf\httpd.conf) pomoću tekst uređivača kao što je Notepad i uradite sledeće izmene:

    Otkomentirajte (uklonite '# znak) sledećim linijama:

    #LoadModule dav_fs_module modules/mod_dav_fs.so
    #LoadModule dav_module modules/mod_dav.so
    

    Add the following two lines to the end of the LoadModule section.

    LoadModule dav_svn_module modules/mod_dav_svn.so
    LoadModule authz_svn_module modules/mod_authz_svn.so
    

Konfiguracija

Sada možete podesiti Apaš i Subverziju, ali Apaš još ne zna kako da opsluži Subverzionog klijenta kao što je TortoiseSVN. Da bi Apaš znao koji URL treba koristiti za Subverziono spremište morate da uredite Apaš konfiguracioni fajl )obično na lokaciji c:\program files\apache group\apache2\conf\httpd.conf) bilo kojim uređivačem teksta koji volite (npr. Notepad):

  1. Na kraj konfig fajla dodajte sledeće linije:

    <Location /svn>
      DAV svn
      SVNListParentPath on
      SVNParentPath D:\SVN
      #SVNIndexXSLT "/svnindex.xsl"
      AuthType Basic
      AuthName "Subversion repositories"
      AuthUserFile passwd
      #AuthzSVNAccessFile svnaccessfile
      Require valid-user
    </Location>
    

    Ovo konfiguriše Apaš tako da Subverzijino spremište je fizički locirano pod D:\SVN. Spremišta za ostali svet opslužuje URL: http://MyServer/svn/. Pristup je ograničen na poznavanje korisnik /lozinka dato u passwd fajlu.

  2. Da biste kreirali passwd fajl, otvorite komandnu liniju (DOS-Boks) ponovo, izmenite u apache2 imenik (obično c:\program files\apache group\apache2) i kreirajte fajl unošenjem

    bin\htpasswd -c passwd <username>
    

    Ovo će kreirati fajl sa imenom passwd koji se koristi za autentikaciju. Dodatni korisnici mogu biti dodati sa

    bin\htpasswd passwd <username>
    
  3. Restrtujte Apaš server ponovo.

  4. Upravite vaš pretraživač na http://MyServer/svn/MyNewRepository (gde je MyNewRepository ime Subverzionog spremišta koje ste ranije kreirali). Ako je sve dobro prošlo bićete upitani za korisničko ime i lozinku, zatim možete videti sadržaj spremišta.

Kratko objašnjenje šta ste upravo uneli:

Tabela 3.1. Apaš httpd.conf podešavanje

PodešavanjeObjašnjenje
<Location /svn>znači da je Subverziono spremište dostupno sa URL http://MyServer/svn/
DAV svnkaže Apašu koji modul je odgovoran da opsluži taj URL - u ovom slučaju Subverzioni modul.
SVNListParentPath onZa Subverziju 1.3 i više, ova direktiva omgućava listanje svih raspoloživih spremišta pod SVNPredakPutanja.
SVNParentPath D:\SVNkaže Subverziji da pogleda spremište ispod D:\SVN
SVNIndexXSLT "/svnindex.xsl"Korišćen da fino pretražuje sa veb pretraživačem.
AuthType Basicda aktivira osnovnu autentifikaciju, npr. korisničkoime/lozinka
AuthName "Subversion repositories"korišćen kao informacija kadgod se pojavi autentifikacioni dijalog da kaže korisniku zašto je autentifikacija
AuthUserFile passwdodređuje koji fajl lozinki koristiti za autentifikaciju
AuthzSVNAccessFileLokacija fajla računa za putanje unutar Subverzionog spremišta
Require valid-userodređuje da samo korisnici koji unesu korektan ime/lozinka mogu da pristupe URL


Ali to je samo jedan primer. Ima mnogo, mnogo više mogućnosti šta sve možete učiniti sa Apaš veb serverom.

  • Ako želite da vaše spremište ima pristup za čitanje za svakog ali pristup za upisivanje samo za određene korisnike morate izmeniti liniju

    Require valid-user
    

    to

    <LimitExcept GET PROPFIND OPTIONS REPORT>
    Require valid-user
    </LimitExcept>
    
  • Korišćenje passwd fajla ograničava i garantuje pristup svim vašim spremištima kao jedinicama. Ako želite više kontrole na to koji korisnici imaju pristup svakom imeniku unutar spremišta možete otkomentirati liniju

    #AuthzSVNAccessFile svnaccessfile
    

    i kreirati Subverzioni fajl pristupa. Apaš će sigurno učiniti da samo valjani korisnici mogu da pristupe vašoj /svn lokaciji, i proslediće korisničko ime Subverzionom AuthzSVNAccessFile modulu tako da će se pojačati granularniji pristup zasnovan na pravilima izlistanim u Subverzionom fajlu pristupa. Primetite da su putanje specificirane ili kaorepos:path ili jednostavno path. Ako ne specificirate posebno spremište, tada će se pristupna pravila primenjivati na sva spremišta pod SVNParentPath. Format fajla autorizacione-polise korišćen od mod_authz_svn opisan je na odeljak pod imenom „Autorizacija zavisna od putanje“

  • Da učinite pretraživanje spremišta veb brozerom 'finije', otkomentirajte liniju

    #SVNIndexXSLT "/svnindex.xsl"
    

    i stavite fajlve svnindex.xsl, svnindex.css i menucheckout.ico u vaš koreni imenik dokumenata (obično C:/Program Files/Apache Group/Apache2/htdocs). Imenik je podešen sa DocumentRoot direktivom u Apaš konfiguracionom fajlu.

    Možete uzeti ova stabla fajlova direktno sa našeg izvorno spremišta na http://tortoisesvn.googlecode.com/svn/trunk/contrib/svnindex. (odeljak pod imenom „TortoiseSVN je besplatan!“ objašnjava kako pristupiti TortoiseSVN izvoru spremišta).

    XSL fajl iz TortoiseSVN spremišta ima fin trik; ako pretražujete spremište vašim veb pretraživačem svaki imenik u vašem spremištu ima ikonu prikazanu s desna. Ako kliknete na tu ikonu TortoiseSVN pokreće dijalog preuzimanja za taj URL.

Višestruka spremišta

Ako ste koristili SVNPredakPutanja direktivu zatim vi niste menjali Apaš kofig fajl svaki put kada ste dodavali novo Subverziono spremište. Jednostavno kreirajte novo spremište pod istom lkacijom kao prvo spremište i vi ste završili! U mojoj kompaniji ja imam direktan pristup specifičnom imeniku na serveru preko SMB (normalan vindouz pristup fajlovima). Tako sam samo kreirao novi imenik tamo, pokrenuo TortoiseSVN komandu TortoiseSVNCreate repository here... i novi projekat je dobio dom...

Ako koristite Subverziju 1.3 ili kasniju, morate koristiti SVNListajPredakPutanju na direktivu da omogućite Apašu da da listing svih dostupnih projekata ako upravite vaš pretraživač na predačku putanju pre nego na posebno spremište.

Autorizacija zavisna od putanje

Modul mod_authz_svn omogućava fino-zrnastu kontrolu na dozvolama zasnovanog pristupa korisničkih imena i putanja spremišta. Ovo je omogućeno Apaš serverom i od Subverzije 1.3 moguće je sa svnserv.

Primer bi izgledao ovakos:

[groups]
admin = john, kate
devteam1 = john, rachel, sally
devteam2 = kate, peter, mark
docs = bob, jane, mike
training = zak
# Default access rule for ALL repositories
# Everyone can read, admins can write, Dan German is excluded.
[/]
* = r
@admin = rw
dangerman =
# Allow developers complete access to their project repos
[proj1:/]
@devteam1 = rw
[proj2:/]
@devteam2 = rw
[bigproj:/]
@devteam1 = rw
@devteam2 = rw
trevor = rw
# Give the doc people write access to all the docs folders
[/trunk/doc]
@docs = rw
# Give trainees write access in the training repository only
[TrainingRepos:/]
@training = rw

Primetimo da provera svake putanje može biti skupa operacija, posebno u slučaju dnevnika revizija. Server proverava svaku promenjenu putanju u svakoj reviziji i proverava da li je čitljiva, što može biti vremenski opterećujuće na revizijama koje obuhvataju veliki broj fajlova.

Autentifikacija i autorizacija su zasebni procesi. Ako korisnik želi da otvori pristup u putanju spremišta, mora se sresti sa oba, zahtevima obične autentifikacije i zahtevima autorizacije pristupa fajlu.

Autentifikacija sa Vindouz domenom

Kao što možete primetiti vama je potrebno da napravite korisnik/lozinka ulaz u passwd fajl za svakog korisnika posebno. I ako (zbog sigurnosti) želite da vaši korisnici povremeno menjaju lozinke imate da uradite izmene ručno.

Ali ima rešenja za taj problem - ako pristupate spremištu unutar LAN sa Vindouz domejn kontrolerom: mod_auth_sspi!

Originalni SSPI modul je ponuđen od Sinepsa uključujući i izvorni kod. Ali razvoj je zaustavljen. Ali ne očajavajte, zajednica će ga podići i poboljšati. On ima novi dom SourceForge.

  • Skinite modul koji hvata vašu apaš verziju, zatim kopirajte fajl mod_auth_sspi.so u Apaš modul imenik.

  • Uredite Apaš konfig fajl: dodajte liniju

    LoadModule sspi_auth_module modules/mod_auth_sspi.so
    

    u LoadModule delu. Budite sigurni da ste ubacili ovu liniju pre linije

    LoadModule auth_module modules/mod_auth.so
    
  • Da napravite Sbverzionu lokaciju koristite ovaj tip autentikacije koju imate da izmenite liniju

    AuthType Basic
    

    to

    AuthType SSPI
    

    also you need to add

    SSPIAuth On
    SSPIAuthoritative On
    SSPIDomain <domaincontroller>
    SSPIOmitDomain on
    SSPIUsernameCase lower
    SSPIPerRequestAuth on
    SSPIOfferBasic On
    

    sa <Location /svn> blok. Ako nemate kontrolor domena, ostavite ime kontrole domena kao<domaincontroller>.

Primetite da ako ste autentikovani korišćenjem SSPI, tada vam više uopšte nije potrebna AuthUserFile linija da definiše fajl lozinke. Apaš umesto toga autentfiikuje vaše korisničko ime i lozinku preko vindouz domena. Potrebno vam je da ažurirate listu korisnika u vašem svnaccessfile ka referenci DOMAIN\imekorisnika.

Važno

SPI autentifikacija je omogućena samo za SSL sigurne konekcije (https). Ako koristite normalnu http konekciju ka vašem serveru, to neće raditi.

Da omogućite SSL na vašem serveru, vidite poglavlje: odeljak pod imenom „Osiguranje servera sa SSL“

Savet

Subverzioni AuthzSVNAccessFile fajlovi su osetljivi na veličinu slova u imenima korisnika (JUser je različito odjuser).

U Mikrosoftovom svetu, Vindouz domeni i korisnička imena nisu osetljivi na veličinu slova. Čak su i neki mrežni administratori voleli da kreiraju korisničke naloge u CamelCase (npr. JUser).

Ova razlika vas može ugristi kada koristite SSPI autentifikaciju kao vindouz domen i korisničko ime prođe u Subverziju u istom obliku kako ga je korisnik otkucao u promptu. Internet Eksplorer često propušta korisničko ime ka Apašu automatski koristeći bilo koju veičinu slova bez obzira kako je račun ispisan.

Krajnji rezultat je da vam možda treba najmanje dva ulaza u vaš AuthzSVNAccessFile za svakog korisnika -- ulaz sa malim slovima i ulaz isti onom kako Internet Eksplorer prosleđuje ka Apašu. Vama će takođe trebati da izvežbate sebe da kucate njihove kredibilitete koristeći mala slova kada pristupate spremištu preko TortoseSVN.

Apašev dnevnik grešaka i pristupa je vaš najbolji prijatelj pri dešifrovanju problema kao što su oni koji vam pomažu da otkrijete string korisničkog imena u svnaccessfile (npr. DOMAIN\user prema DOMAIN//user) da bi dobili da sve radi.

Višestruki autentifikacioni izvori

Moguće je imati više od jednog autentifikacionog izvora za Subverziono spremište. Da se to uradi potrebno je napraviti svaki autentifikacioni tip neautoritativan tako da Apaš proverava višestruke izvore da bi dohvatio korisnik/lozinka.

Zajednički scenario je da se koristi oboje, Vindouz domen autentikacija i passwd fajl, tako možete omogućiti SVN pristup ka korisnicima koji nemaju pristup Vindouz domenu.

  • Da se omogući oba, Vindouz domen i passwd fajl autentifikacija, dodajte sledeće ulaze u okviru <Location> bloka vašrg Apaš konfig fajla:

    AuthBasicAuthoritative Off
    SSPIAuthoritative Off
    

Ovde je jedan primer pune Apaš konfiguracije za kombinovane Vindouz domene i passwd fajl autentifikaciju:

<Location /svn>
  DAV svn
  SVNListParentPath on
  SVNParentPath D:\SVN

  AuthName "Subversion repositories"
  AuthzSVNAccessFile svnaccessfile.txt

# NT Domain Logins.
  AuthType SSPI
  SSPIAuth On
  SSPIAuthoritative Off
  SSPIDomain <domaincontroller>
  SSPIOfferBasic On

# Htpasswd Logins.
  AuthType Basic
  AuthBasicAuthoritative Off
  AuthUserFile passwd

  Require valid-user
</Location>

Osiguranje servera sa SSL

Bez obzira ako Apaš 2.2.x ima OpenSSL podršku, to nije obično aktivirano. Treba da to aktivirate ručno.

  1. U apaš konfig fajlu, otkomentiraj linije:

    #LoadModule ssl_module modules/mod_ssl.so
    

    and at the bottom

    #Include conf/extra/httpd-ssl.conf
    

    then change the line (on one line)

    SSLMutex "file:C:/Program Files/Apache Software Foundation/\
    Apache2.2/logs/ssl_mutex"
    

    to

    SSLMutex default
    
  2. Sledeći put treba da kreirati SSL sertifikat. Da to uradite otvorite komandnu liniju (DOS-Boks) i pređite u Apaš imenik (npr. C:\program files\apache group\apache2) i ukucajte sledeću komandu:

    bin\openssl req -config conf\openssl.cnf -new -out my-server.csr
    

    Bićete upitani za pasfrazu. Molim vas nemojte koristiti jednostavne reči već celu rečenicu, npr. deo poeme. Duža fraza je bolja. Takođe imate da uđete u URL vašeg servera. Sva ostala pitanja su neobavezna ali mi preporučujemo da ih sve popunite.

    Normalno privkey.pem fajl je kreiran automatski, ali ako nije treba da otkucate ovu komandu da ga generišete:

    bin\openssl genrsa -out conf\privkey.pem 2048
    

    Zatim otkucajte komande

    bin\openssl rsa -in conf\privkey.pem -out conf\server.key
    

    and (on one line)

    bin\openssl req -new -key conf\server.key -out conf\server.csr \
    -config conf\openssl.cnf
    

    and then (on one line)

    bin\openssl x509 -in conf\server.csr -out conf\server.crt
                     -req -signkey conf\server.key -days 4000
    

    This will create a certificate which will expire in 4000 days. And finally enter (on one line):

    bin\openssl x509 -in conf\server.cert -out conf\server.der.crt
                     -outform DER
    

    Ove komande su kreirale neke fajlove u Apaš konf imenik (server.der.crt, server.csr, server.key, .rnd, privkey.pem, server.cert).

  3. Restartujte Apaš servis.

  4. Upravite pretraživač ka https://servername/svn/project ...

SSL i Internet Eksplorer

Ako osigurate vaš server sa SSL i koristite autentifikaciju prema Vindouz domenu vi ćete naći da pretraživanje spremišta Internet Eksplorerom uopšte ne radi. Ne brinite - to samo Internet Eksplorer nije sposoban da autentifikuje. Drugi pretraživači nemaju taj problem i TortoiseSVN i bilo koji drugi Subverzioni klijent još može da autentifikuje.

Ako još uvek želite da koristite IE za pretraživanje spremišta možete ili:

  • definišite odvojenu <Location /path> direktivu u Apaš konfig fajlu, i dodajte SSPIBasicPreferred On. Ovo će omogućiti IE da autentifikuje opet, ali drugi pretraživači i Subverzija nisu sposobni da autentifikuju prema lokaciji.

  • Ponudite pretraživanje sa nešifriranom autentifikacijom (bez SSL) takođe. IE nema bilo koje probleme sa autentifikacijom ako veza nije osigurana sa SSL.

  • U SSL "standardno" podešavanje ima često sledeću naredbu na Apaš virtualnom SSL domaćinu:

    SetEnvIf User-Agent ".*MSIE.*" \
                 nokeepalive ssl-unclean-shutdown \
                 downgrade-1.0 force-response-1.0
    

    Ima (gde?)dobrih razloga za ovu konfiguraciju, vidite http://www.modssl.org/docs/2.8/ssl_faq.html#ToC49 Ali ako želite NTLM autentifikaciju imate da koristitekeepalive. Ako Vi otkomentirate celu SetEnvIf trebalo bi da možete da autentifikujete IE sa vindouz autentifikacijom preko SSL prema Apašu na Vin32 uključivši mod_auth_ssp.

Forsiranje SSL pristupa

Kada se podesi SSP da učini spremište sigurnim, možete želeti da onemogućiti normalni pristup preko non-SSL (http) i dozvoljava samo https pristup. Da se to uradi, treba dodati još jednu direktivu u Subverziju <Location> block: SSLRequireSSL.

Primer <Location> blok će izgledati kao ovo:

<Location /svn>
  DAV svn
  SVNParentPath D:\SVN
  SSLRequireSSL
  AuthType Basic
  AuthName "Subversion repositories"
  AuthUserFile passwd
  #AuthzSVNAccessFile svnaccessfile
  Require valid-user
</Location>

Korišćenje klijent sertifikata sa virtualnim SSL domaćinima.

Poslato TortoiseSVN poštanskoj listi od Nigel Grina. Hvala!

U nekim serverskim konfiguracijama treba da podesite pojednačni server koji sadrži 2 virtualna SSL domaćina: Prvi za publik veb pristup, bez zahteva za klijentske sertifikate. Drugi da bude siguran sa traženjem sertifikata klijenta, izvršavajući Subverzioni server.

Dodavanje SSLPriveraKlijenta Opciono direktivu u per-server deo Apaš konfiguraciju (tj. izvan VirtualniDomaćin i Imenik blokovi) forsira Apaš da zahteva klijentov Sertifikat u početnom SSL rukovanju. U toku baga u mod_ssl važno je da zahtev za sertifikatom u toj tački ne radi ako se SSL konekcija ponovo pregovara.

Rešenje je da se doda sledeća direktiva virtuelnom imeniku domaćina koji žwželite da zaključate za Subverziju:

SSLRequire %{SSL_CLIENT_VERIFY} eq "SUCCESS"

Ova direktiva garantuje pristup imeniku samo ako je primljen klijentov sertifikat i zadovoljavajuće verikovan.

Da sumiramo, relevantne linije Apaš konfiguracij e su:

SSLVerifyClient Optional

### Virtual host configuration for the PUBLIC host 
### (not requiring a certificate)

<VirtualHost 127.0.0.1:443>
  <Directory "pathtopublicfileroot">
  </Directory>
</VirtualHost>

### Virtual host configuration for SUBVERSION 
### (requiring a client certificate)
<VirtualHost 127.0.0.1:443>
  <Directory "subversion host root path">
    SSLRequire %{SSL_CLIENT_VERIFY} eq "SUCCESS"
  </Directory>

  <Location /svn>
    DAV svn
    SVNParentPath /pathtorepository
  </Location>
</VirtualHost>