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:
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.“
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.
Možete koristiti mehanizam autentikacije podrške Apašu, uključujući SSPI i LDAP.
Kako je Apaš veoma stabilan i siguran, vi automatski dobijate istu sigurnost za spremište. Ovo obuhvata SSP šifrovanje.
Prva svar koja vam je potrebna pre instaliranja Apaša je kompjuter sa Vindouz 2000, Vindouz XP+SP1, Vindouz 2003, Vista ili Server 2008.
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.
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).
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.
Sada testirajte da li Apaš veb server radi ispravno upravljajući veb pretraživač na http://localhost/ - prekonfigurisan vebsajt treba da bude prikazan.
Ako odlučite da instalirate Apaš kao servis, znajte da tada podrazumevano 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.
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.
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.
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 ).
Kopirajte fajl /bin/libdb*.dll i /bin/intl3_svn.dll iz Subverzijinog instalacionog imenika u Apaš bin imenik.
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
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):
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.
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>
Restrtujte Apaš server ponovo.
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šavanje | Objašnjenje |
|---|---|
| <Location /svn> | znači da je Subverziono spremište dostupno sa URL http://MyServer/svn/ |
| DAV svn | kaže Apašu koji modul je odgovoran da opsluži taj URL - u ovom slučaju Subverzioni modul. |
| SVNListParentPath on | Za Subverziju 1.3 i više, ova direktiva omgućava listanje svih raspoloživih spremišta pod SVNPredakPutanja. |
| SVNParentPath D:\SVN | kaže Subverziji da pogleda spremište ispod D:\SVN |
| SVNIndexXSLT "/svnindex.xsl" | Korišćen da fino pretražuje sa veb pretraživačem. |
| AuthType Basic | da aktivira osnovnu autentikaciju, npr. korisničkoime/lozinka |
| AuthName "Subversion repositories" | korišćen kao informacija kadgod se pojavi autentikacioni dijalog da kaže korisniku zašto je autentikacija |
| AuthUserFile passwd | određuje koji fajl lozinki koristiti za autentikaciju |
| AuthzSVNAccessFile | Lokacija fajla računa za putanje unutar Subverzionog spremišta |
| Require valid-user | određ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 tri fajla direktno sa našeg izvornog spremišta na http://tortoisesvn.googlecode.com/svn/trunk/contrib/svnindex. (odeljak pod imenom „Licence“ objašnjava kako pristupiti TortoiseSVN izvornom spremištu).
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.
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 → 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.
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.
Autentikacija i autorizacija su zasebni procesi. Ako korisnik želi da otvori pristup u putanju spremišta, mora se sresti sa oba, zahtevima obične autentikacije i zahtevima autorizacije pristupa fajlu.
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\username.
SPI autentikacija 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“
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 autentikaciju 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.
Moguće je imati više od jednog autentikacionog izvora za Subverziono spremište. Da se to uradi potrebno je napraviti svaki autentikacioni 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 autentikacija, 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 autentikaciju:
<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>
Bez obzira ako Apaš 2.2.x ima OpenSSL podršku, to nije podrazumevano aktivirano. Treba da to aktivirate ručno.
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
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
Ovoće kreirati sertifikat koji ističe za 4000 dana. I krajni ulaz (najednu liniju):
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).
Restartujte Apaš servis.
Upravite pretraživač ka https://servername/svn/project ...
Ako osigurate vaš server sa SSL i koristite autentikaciju 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 autentikuje. Drugi pretraživači nemaju taj problem i TortoiseSVN i bilo koji drugi Subverzioni klijent još može da autentikuje.
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 autentikuje opet, ali drugi pretraživači i Subverzija nisu sposobni da autentikuju prema lokaciji.
Ponudite pretraživanje sa nešifriranom autentikacijom (bez SSL) takođe. IE nema bilo koje probleme sa autentikacijom 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 autentikaciju imate da koristitekeepalive. Ako Vi otkomentirate celu SetEnvIf trebalo bi da možete da autentikujete IE sa vindouz autentikacijom preko SSL prema Apašu na Vin32 uključivši mod_auth_ssp.
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>
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>