Strežnik svnserve

Uvod

Subversion includes Svnserve - a lightweight stand-alone server which uses a custom protocol over an ordinary TCP/IP connection. It is ideal for smaller installations, or where a full blown Apache server cannot be used.

In most cases svnserve is easier to setup and runs faster than the Apache based server, although it doesn't have some of the advanced features. And now that SASL support is included it is easy to secure as well.

Nameščanje svnserve

  1. Najnovejšo različico sistema Subversion prenesite z naslova http://subversion.apache.org/getting.html. Prenesete pa lahko tudi namestitveni program iz strežnika CollabNet na naslovu http://www.collab.net/downloads/subversion. Namestitveni program namesti svnserve kot storitev Windows, vsebuje pa tudi nekaj orodij, ki jih potrebujete za varno delovanje preko SASL.

  2. Če je Subversion že nameščen in svnserve trenutno teče, ga morate pred nadaljevanjem zaustaviti.

  3. Zaženite namestitvni program Subversion. Če nameščate Subversion na strežniku (priporočamo), lahko korak 4 preskočite.

  4. Odprite Raziskovalca, pojdite na namestitveno mapo Subversion (običajno C:\Program Files\Subversion) in v mapi bin poiščite datoteke svnserve.exe, intl3_svn.dll, libapr.dll, libapriconv.dll, libapriutil.dll, libdb*.dll, libeay32.dll in ssleay32.dll - prekopirajte jih ali pa prekopirajte celopno mapo bin v mapo na vašem strežniku, n. pr. c:\svnserve

Poganjanje svnserve

Sedaj, ko je svnserve nameščen, ga morate na strežniku zagnati. Najlažji način je, da v lupini DOS izvedete naslednji ukaz ali narediti bližnjico:

svnserve.exe --daemon

svnserve bo sedaj čakal na prihajajoče zahteve na vratih 3690. Stikalo --daemon pove, naj svnserve teče kot skriti proces, dokler ga ročno ne zaustavimo.

Če še niste ustvarili skladišča, sledite navodilom, podanim pri namestitvi strežnika Apache: “Konfiguracija”.

Če želite preveriti, ali svnserve teče, uporabite TortoiseSVNSkladiščni brskalnik - videti morate skladišče.

Če predpostavimo, da se skladišče nahaja v mapi c:\sklad\TestnoSkladišče, in je vašemu strežniku ime localhost, vpišite:

svn://localhost/sklad/TestnoSkladišče

ko dobite poziv brskalnika po skladišču.

Z uporabo stikala --root lahko povečate varnost in prihranite čas pri vnašanju naslovov URL. S tem določite korensko lokacijo in omejite dostop na izbrano mapo na strežniku:

svnserve.exe --daemon --root pogon:\pot\do\skladišča\root

Če uporabimo prejšnji primer, se ukaz za zagon svnserve sedaj glasi:

svnserve.exe --daemon --root c:\sklad

V skladiščnem brskalniku TortoiseSVN pa se naslov URL skrajša na:

svn://localhost/TestnoSkladišče

Upoštevajte, da morate stikalo --root uporabiti tudi takrat, ko se skladišče nahaja na drugi particiji ali pogonu kot svnserve.

Svnserve lahko streže poljubnemu številu skladišč. Postavite jih nekam pod korensko mapo, ki ste jo pravkar definirali, in dostopajte do njih z uporabo relativnega naslova URL glede na korenskega.

Pozor

Ne ustvarjajte ali dostopajte do skladišč tipa Berkley DB v mapah skupne rabe v omrežju. Takšno skladišče ne more obstajati na oddaljenem datotečnem sistemu, četudi imate omrežni pogon preslikan v lokalni pogon. Če boste poskušali dostopati do skladišča tipa Berkley DB v omrežju, so rezultati nepredvidljivi - lahko se takoj pojavijo čudne napake, lahko pa traja mesece, preden boste opazili, da je vaša baza podatkov pokvarjena.

Zaženite svnserve kot storitev

Poganjanje svnserve kot nek uporabnik običajno ni najboljša rešitev. To pomeni, da mora biti uporabnik stalno prijavljen na strežniku, prav tako se mora uporabnik prijaviti po ponovnem zagonu. Boljši način je poganjanje svnserve kot storitev (service) Windows. Od različice Subversion 1.4 se svnserve lahko namesti kot domorodna storitev (native windows service).

Za namestitev svnserve kot domorodno storitev (native windows service) izvršite naslednji ukaz v eni vrstici. S tem ustvarite storitev, ki se samodejno zažene ob zagonu sistema.

sc create svnserve binpath= "c:\svnserve\svnserve.exe --service 
    --root c:\repos" displayname= "Subversion" depend= tcpip 
    start= auto

Če katera od poti vsebuje presledke, morate uporabiti poševnice in navednice. Primer:

sc create svnserve binpath= "
    \"C:\Program Files\Subversion\bin\svnserve.exe\"
    --service --root c:\repos" displayname= "Subversion" 
    depend= tcpip start= auto

Ko ste storitev ustvarili, jih lahko dodate tudi opis. Le ta se potem pojavi v upravljalcu storitev (Windows Service Manager).

sc description svnserve "Strežnik Subversion (svnserve)"

Pazite na nekoliko nenavadno obliko ukaza sc. Pri podajanju parametrov ključ= vrednost ne sme biti med ključem in znakom = nobenega presledka, presledek pa se mora nahajati pred vrednostjo.

Namig

Microsoft po novem priporoča, da se storitve poganjajo pod računom Lokalna storitev (Local Service) ali Omrežna storitev (Network Service). Preverite The Services and Service Accounts Security Planning Guide. Za ustvarjanje storitve pod računom Lokalna storitev dodajte zgornjemu primeru naslednjo vrstico.

obj= "NT AUTHORITY\LocalService"

Upoštevajte, da morate dodati računu potrebne pravice za Subversion in skladišča, prav tako pa tudi za vse aplikacije, ki jih kličejo ukazne datoteke akcij. Vgrajena skupina za to se imenuje "LOCAL SERVICE".

Ko ste namestili storitev, morate v urejevalnik storitev, da jo zaženete (samo tokrat; po ponovnem zagonu strežnika se bo pognala samodejno).

Za ostale informacije kliknite na Windows Service Support for Svnserve.

Če ste predhodnjo različico svnserve namestili z uporabo ovoja SVNService, sedaj pa želite uporabiti storitev Windows, morate preklicati registracijo ovoja kot storitve (ne pozabiti storitve najprej zaustaviti!). Za odstranitev registracije iz registra uporabite naslednji ukaz:

svnservice -remove

Osnovna avtentikacija s svnserve

Po privzetih nastavitvah svnserve omogoča anonimen dostop samo za branje. To pomeni, da lahko uporabite naslov svn:// za prevzem in posodobitev skladišča ali skladiščni brskalnik za pregledovanje skladišča, ne morete pa objavljati narejenih sprememb.

Da bi omogočili pisanje v skladišče, morate popraviti datoteko conf/svnserve.conf v mapi skladišča. Ta datoteka vsebuje nastavitve svnserve, poleg tega pa tudi koristno dokumentacijo.

Možnost pisanja anonimnim uporabnikom lahko omogočite z enostavno nastavitvijo:

[general]
anon-access = write

Vendar pa v tem primeru ne veste, kdo je spremembe vpisal, saj bo lastnost svn:author prazna. Prav tako ne boste mogli določati, kdo lahko spremembe v skladišče zapisuje. To je nevarno!

Rešitev problema je ustvarjanje baze gesel:

[general]
anon-access = none
auth-access = write
password-db = datotekauporabnikov

datotekauporabnikov je datoteka, ki se nahaja v isti mapi kot datoteka svnserve.conf. Datoteka se lahko nahaja tudi drugje (kar je uporabno, če imate več skladišč, kjer potrebujete iste pravice za dostop) in jo navedete z absolutno potjo ali potjo, relativno na mapo conf. Če vključite pot, mora biti navedena /po/pravilih/sistema/unix. Uporaba znaka \ ali črk pogona ni dovoljena. Datoteka datotekauporabnikov mora imeti naslednjo strukturo:

[users]
uporabniško ime = geslo
...

Ta primer prepove dostop vsem anonimnim uporabnikom (takšnim, ki se niso avtenticirali), uporabnikom, ki so navedeni v datoteki datotekauporabnikov, pa dovoli branje in pisanje po skladišču.

Namig

If you maintain multiple repositories using the same password database, the use of an authentication realm will make life easier for users, as TortoiseSVN can cache your credentials so that you only have to enter them once. More information can be found in the Subversion book, specifically in the sections Create a 'users' file and realm and Client Credentials Caching

Boljša varnost s SASL

Kaj je SASL?

The Cyrus Simple Authentication and Security Layer je odprtokodni projekt univerze Carnegie Mellon, ki kateremukoli protokolu doda generično avtentikacijo in enkripcijo. Od različice 1.5 naprej znata to knjižnico uporabljati tako svnserve kot odjemalec TortoiseSVN.

For a more complete discussion of the options available, you should look at the Subversion book in the section Using svnserve with SASL. If you are just looking for a simple way to set up secure authentication and encryption on a Windows server, so that your repository can be accessed safely over the big bad Internet, read on.

Avtentikacija SASL

Za aktivacijo določenih mehanizmov SASL na strežniku morate narediti tri stvari. Najprej ustvarite sekcijo [sasl] v datoteki svnserve.conf, ki se nahaja znotraj skladišča, pri tem uporabite naslednjo vrednost:

use-sasl = true

Nato ustvarite datoteko svn.conf na primerni lokaciji - ponavadi je to v namestitveni mapi Subversion.

Nazadnje ustvarite vnose v registru, ki SASL povejo, kje naj najde stvari. Ustvarite vnos [HKEY_LOCAL_MACHINE\SOFTWARE\Carnegie Mellon\Project Cyrus\SASL Library], vanj pa dodajte dve novi vrednosti (niz/string): SearchPath nastavite na mapo, ki vsebuje vtičnike sasl*.dll (običajno je to namestitvena mapa Subversion), in ConfFile nastavite na mapo, ki vsebuje datoteko svn.conf. Če ste za namestitev uporabili namestitveni program s strežnika CollabNet, imate te vnose že v registru.

Datoteki svn.conf dodajte naslednje besedilo:

pwcheck_method: auxprop
auxprop_plugin: sasldb
mech_list: DIGEST-MD5
sasldb_path: C:\TortoiseSVN\sasldb

Zadnja vrstica prikazuje lokacijo avtentikacijske baze podatkov, ki se imenuje sasldb. Nahaja se lahko kjerkoli, vendar je najbolj primerna lokacija nadrejena mapa skladišča. Poskrbite, da ima storitev svnserve pravice za branje te datoteke.

Če storitev svnserve že teče, jo morate zaustaviti in zagnati pogovno, da prebere posodobljene namestitvene podatke.

Sedaj, ko je namestitev zaključena, lahko ustvarite uporabnike in gesla. Za to potrebujete program saslpasswd2. Če ste uporabili namestitveni program CollabNet, se ta program nahaja v namestitveni mapi. Uporabite naslednjo ukazno vrstico:

saslpasswd2 -c -f C:\TortoiseSVN\sasldb -u realm uporabniškoime

Stikalo -f pove, da podajate lokacijo baze podatkov, vrednost realm mora biti enaka vrednosti, ki ste jo navedli v datoteki svnserve.conf skladišča, uporabniškoime pa je željeno uporabniško ime uporabnika. Upoštevajte, da realm ne sme vsebovati presledkov.

Seznam uporabniških imen v bazi lahko izpišete s programom sasldblistusers2.

Enkripcija SASL

Za določanje različnih nivojev enkripcije lahko v datoteki svnserve.conf skladišča nastavite dve vrednosti:

[sasl]
use-sasl = true
min-encryption = 128
max-encryption = 256

Vrednosti min-encryption in max-encryption določata nivo enkripcije, ki jo zahteva strežnik. Če želite enkripcijo onemogočiti, nastavite obe vrednosti na 0. Če želite omogočiti preverjanje kontrolne vsote (torej preprečiti spreminjanje in zagotoviti integriteto podatkov brez enkripcije), nastavite obema spremenljivkama vrednost 1. Če želite omogočiti (vendar ne zahtevati) enkripcijo, nastavite najmanjšo vrednost na 0, največjo pa na število bitov enkripcije. Za brezpogojno uporabo enkripcije nastavite obe spremenljivko na vrednoost več kot 1. V prejšnjem primeru zahtevamo vsaj 128 bitno enkripcijo, hkrati pa največ 256 bitno.

Avtentikacija s svn+ssh

Drug način za avtentikacijo uporabnikov s strežnikom na osnovi svnserve je uporaba SSH (secure shell) za prenos zahtevkov s pomočjo tunelskega načina. Ta način ni tako enostaven kot SASL, vendar je lahko uporaben v določenih primerih.

S tem pristopom se svnserve ne zaganja kot skriti proces, ampak varnostna lupina zažene svnserve za vas, poganja pa ga kot avtenticiran uporabnik SSH. Na strežniku potrebujete skriti proces za varnostno lupino (secure shell daemon).

Osnovna navodila za postavitev strežnika so podana v poglavju Dodatek G, Zavarovanje strežnika Svnserve z SSL. Podrobnosti o SSH najdete v pogosto zastavljenih vprašanjih. Iščite niz “SSH”.

Več informacij o svnserve lahko dobite na naslovu Version Control with Subversion.

Avtorizacija svnserve na osnovi poti

Od različice Subversion 1.3 najprej svnserve omogoča uporabo istega modula mod_authz_svn za avtorizacijo na osnovi poti, kot je na voljo v strežniku Apache. Spremeniti morate datoteko conf/svnserve.conf v mapi skladišča in dodati vrstico, ki pove, kje se nahaja avtorizacijska datoteka.

[general]
authz-db = authz

authz je datoteka, ki jo ustvarite za določanje pravic dostopa. Za vsako skladišče lahko ustvarite svojo datoteko, lahko pa uporabite skupno datoteko za več skladišč. Preberite “Avtorizacija na osnovi poti”, kjer je opisana oblika datoteke.