第一步,安装Apache+Subversion
首先,我选择了apache_2.0.59+svn-1.4.3的组合
下载安装apache_2.0.59版本,http://ftp.ntu.edu.tw/Apache/httpd/binaries/win32/
把Subversion/bin下面所有.dll文件复制到Apache Group\Apache2\bin下,提示有文件覆盖,选择不覆盖;再将Subversion/bin下的.so文件复制到Apache Group\Apache2\modules下。
第二步,修改apache的配置文件
接著打开Apache HTTP Server 的 httpd.conf(在 /conf/ 目录下),先找到以下两行:
#LoadModule dav_module modules/mod_dav.so
#LoadModule dav_fs_module modules/mod_dav_fs.so
把這两行最前面的 '#' 字符刪除,然后把下面这行加到这些 LoadModule 指令的后面:
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
用记事本打开 Apache HTTP Server 的 httpd.conf,在文件最后面加上以下几行:
#<Location /svn>
DAV svn
#give the repository path
SVNParentPath "e:/svn"
#Satisfy Any
# AuthType Basic
#AuthName "subversion repository"
#AuthUserFile "C:/Program Files/Apache Group/Apache2/svn-auth-filename"
#(保存用户名和密码)
#Require valid-user
#SSLRequireSSL
#AuthzSVNAccessFile "C:/Program Files/Apache Group/Apache2/svn-access-filename"
#(保存用户访问的权限策略)
#</Location>
其中d:/svn为你要建的仓库的父目录(必须为本地目录),最好用双引号引一下.
第三步,创建仓库
根据apache的配置文件的设置建立目录:d:/svn.然后我们就可以在下面建立仓库了,创建方法如下:
c:\>svnadmin create d:/svn/repository
命令执行成功之后,会在d:/svn/repository下面生成很多的文件和目录
第四步,使用
重新启动Apache Server
在浏览器中输入网址:
http://localhost/svn/repository/
这时候,看到页面显示:
Revision 0: /
Powered by Subversion version 1.3.2 (r19776).
*****************************************************************
4
创建用户
Apache的 ..\apache\Apache2\bin文件下自带的程序:htpasswd.exe 即可完成用户创建。
C:\Apache Group\Apache2\bin>htpasswd –cm /path/fileName admin
好了,这样就在指定的路径处创建了一个指定名字的用户文件,并创建了一个用户名admin。其中c表示要创建新的文件,m表示要创建账户。这时候,会提示输入密码,并要求验证:
New password: *****
Re-type new password: *****
Adding password for user admin
好了,一个账号建好了。可以接着建用户:
C:\Apache Group\Apache2\bin>htpasswd –m /path/fileName kevinl
New password: ******
Re-type new password: ******
Adding password for user kevinl
注意,因为第一次已经创建了文件,此处只需要-m 即可,不需要c了。
Ok,现在用户文件建好了。打开apache的httpd.conf文件,将…< Location>改为:
DAV svn
#give the repository path
SVNPath /absolute/path/to/repository
AuthType Basic
AuthName “Xi’an server of NA mirror”
AuthUserFile /path/to/passwd/fileName
Require valid-user
如果已经有一个apache服务,希望两个apache服务同时运行,则修改其中一个的服务端口。
修改httpd.conf中的一行: Listen 80 将80改成其他不用的端口号
5 权限管理
这同样需要一个权限管理文件。首先在httpd.conf中指定这个文件.
AuthzSVNAccessFile / path/to/auth_access_police_file
下面我们来讨论如何写权限管理文件.
这之中权限有三个等级:读写,读,无,分别为(rw, r, 空)
权限文件中以空行分开多个单位。每个单位定义对一个文件的权限管理。此外,为了方便管理我们可以将用户分组。分组用一个单位,一般位于文件的前面。如下:
[groups]
calc-developers = harry, sally, joe
paint-developers = frank, sally, jane
admin = joe, frank, sally, jane
形式如下:
建立控制用户访问权限的文件svn-access-filename
[svn1:/] //这表示,仓库svn1的根目录下的访问权限
harry = rw // svn1仓库harry用户具有读和写权限
sally = r // svn1仓库sally用户具有读权限
[svn2:/] //svn2仓库根目录下的访问权限
harry = r // harry用户在svn2仓库根目录下只有读权限
sally = // sally用户在 svn2仓库根目录下无任何权限
[svn2:/src] //svn2仓库下src目录的访问权限
harry=rw
sally=r
[/] // 这个表示在所有仓库的根目录下
* = r // 这个表示对所有的用户都具有读权限
[groups] // 这个表示群组设置
svn1-developers = harry, sally // 这个表示某群组里的成员
svn2-developers = sally
[svn1:/]
@svn1-developers = rw // 如果在前面加上@符号,则表示这是个群组权限设置
然后修改httpd.conf配置:
<Location /svn>
DAV svn
SVNParentPath /svn
AuthType Basic
AuthName “Subversion repository”
AuthUserFile /svn-auth-filename (保存用户名和密码)
Require valid-user
AuthzSVNAccessFile /svn-access-filename(保存用户访问的权限策略)
</Location>
[calc:/trunk/]
harry = rw
sally = r
@=rw
设置calc工程中/trunk的权限.其中harry对其有读和写权限,sally有读的权限,组admin有读写权限(注意,组名前面有一个@符号).
上面定义针对多个库的情况,若只有一个可写为:
[ /trunk/]
harry = rw
sally = r
若要设置所有用户对根目录的权限,为:
[/]
*=r
权限管理的工作原理:默认情况下对所有文件夹是有读写权限的;对于父文件的权限会被子文件夹和文件继承;对于子文件权限的定义会覆盖由父文件继承来的权限规则。当某用户访问某一文件夹时,首先会寻找是否对此文件夹下此用户进行了设置,若设置了就采用该规则;否则,就找他的父文件夹,若还是没有对该文件夹定义,则继续向上。直到根目录。若仍没有,就采用默认。
Ok。如果我们向增加安全性,可以让apache采取SSL方式发布,需要两步,首先是制作证书,然后是配置管理文件.
6 制作证书.
有两种方式,使用openssl和使用第三方工具opesnVPN.
A 使用openssl。
你需要准备openssl.exe和openssl.cnf。
openssl.exe在..\apache\Apache2\bin下(注意只有支持SSL的apache安装后才有,也可下载http://hunter.campbus.com/);openssl.cnf下载http://tud.at/programm/openssl.cnf并拷贝到..\apache\Apache2\bin下.
好了,开始制作了,在命令行下定位到..\apache\Apache2\bin,运行:
$openssl req -config openssl.cnf -new -out active.csr
然后回答相关问题来制作一个证书active.csr.这个证书实际就是一个用公私密钥加密的文本文件,它需要被第三方机构授权.
$openssl rsa -in privkey.pem -out active.key
得到密钥.
$openssl x509 -in active.csr -out active.cert -req -signkey active.key -days 4000
得到使用密钥加密了的证书,有效期为4000天.
$openssl x509 -in active.cert -out active.der.crt -outform DER
Der形式的证书。
好了,现在,我们有文件:
l active.der.crt(certificate of DER style)
l active.csr
l active.key(private key)
l .rnd,
l privkey.pem
l active.cert(certificate of PEM style)
7 配置文件
把文件active.der.crt和active.key拷贝到..\Apache Group\Apache2\conf\ssl
打开文件httpd.cnf,将下面行前的注释去掉:
LoadModule ssl_module modules/mod_ssl.so
打开文件..\Apache Group\Apache2\conf\ssl.cnf,确保以下行是没有注释掉的.
DocumentRoot "../Apache Group/Apache2/htdocs"
ServerName www.active.com:443
ServerAdmin eric.du@active.com
ErrorLog logs/error_log
TransferLog logs/access_log
SSLMutex default
SSLRandomSeed startup builtin
SSLSessionCache none
(SSLSessionCache确保其他行是注释的)
做以下两个更改:
SSLCertificateFile conf/ssl.crt/server.crt
-à SSLCertificateFile conf/ssl/active.der.crt
SSLCertificateKeyFile conf/ssl.key/server.key
--> SSLCertificateKeyFile conf/ssl/active.key
去掉或注释以下两行:
# ifDefine SSL
# ifDefine
好了,重启apache,测试访问:https://localhost和https://localhost/svn.
现在我们可以通过http和https两种方式访问.如果我们强制要求使用https或对http自动重定向为https.就需要参考下面:
8 强制SSL和自动重定向
打开httpd.conf,进行配置.
如果只是要求subversion库使用此策略,则就将下面的命令放在…< Location>中,若是整个apache,则放在…中.
1) 强制
SSLRequireSSL
2) 自动重定向
RewriteEngine on
RewriteCond %{REMOTE_ADDR} !^172\.31\.224\.[0-9]+$
RewriteCond %{HTTPS} !on [NC]
RewriteRule .* - [F]
首先,我选择了apache_2.0.59+svn-1.4.3的组合
下载安装apache_2.0.59版本,http://ftp.ntu.edu.tw/Apache/httpd/binaries/win32/
把Subversion/bin下面所有.dll文件复制到Apache Group\Apache2\bin下,提示有文件覆盖,选择不覆盖;再将Subversion/bin下的.so文件复制到Apache Group\Apache2\modules下。
第二步,修改apache的配置文件
接著打开Apache HTTP Server 的 httpd.conf(在 /conf/ 目录下),先找到以下两行:
#LoadModule dav_module modules/mod_dav.so
#LoadModule dav_fs_module modules/mod_dav_fs.so
把這两行最前面的 '#' 字符刪除,然后把下面这行加到这些 LoadModule 指令的后面:
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
用记事本打开 Apache HTTP Server 的 httpd.conf,在文件最后面加上以下几行:
#<Location /svn>
DAV svn
#give the repository path
SVNParentPath "e:/svn"
#Satisfy Any
# AuthType Basic
#AuthName "subversion repository"
#AuthUserFile "C:/Program Files/Apache Group/Apache2/svn-auth-filename"
#(保存用户名和密码)
#Require valid-user
#SSLRequireSSL
#AuthzSVNAccessFile "C:/Program Files/Apache Group/Apache2/svn-access-filename"
#(保存用户访问的权限策略)
#</Location>
其中d:/svn为你要建的仓库的父目录(必须为本地目录),最好用双引号引一下.
第三步,创建仓库
根据apache的配置文件的设置建立目录:d:/svn.然后我们就可以在下面建立仓库了,创建方法如下:
c:\>svnadmin create d:/svn/repository
命令执行成功之后,会在d:/svn/repository下面生成很多的文件和目录
第四步,使用
重新启动Apache Server
在浏览器中输入网址:
http://localhost/svn/repository/
这时候,看到页面显示:
Revision 0: /
Powered by Subversion version 1.3.2 (r19776).
*****************************************************************
4
创建用户
Apache的 ..\apache\Apache2\bin文件下自带的程序:htpasswd.exe 即可完成用户创建。
C:\Apache Group\Apache2\bin>htpasswd –cm /path/fileName admin
好了,这样就在指定的路径处创建了一个指定名字的用户文件,并创建了一个用户名admin。其中c表示要创建新的文件,m表示要创建账户。这时候,会提示输入密码,并要求验证:
New password: *****
Re-type new password: *****
Adding password for user admin
好了,一个账号建好了。可以接着建用户:
C:\Apache Group\Apache2\bin>htpasswd –m /path/fileName kevinl
New password: ******
Re-type new password: ******
Adding password for user kevinl
注意,因为第一次已经创建了文件,此处只需要-m 即可,不需要c了。
Ok,现在用户文件建好了。打开apache的httpd.conf文件,将…< Location>改为:
DAV svn
#give the repository path
SVNPath /absolute/path/to/repository
AuthType Basic
AuthName “Xi’an server of NA mirror”
AuthUserFile /path/to/passwd/fileName
Require valid-user
如果已经有一个apache服务,希望两个apache服务同时运行,则修改其中一个的服务端口。
修改httpd.conf中的一行: Listen 80 将80改成其他不用的端口号
5 权限管理
这同样需要一个权限管理文件。首先在httpd.conf中指定这个文件.
AuthzSVNAccessFile / path/to/auth_access_police_file
下面我们来讨论如何写权限管理文件.
这之中权限有三个等级:读写,读,无,分别为(rw, r, 空)
权限文件中以空行分开多个单位。每个单位定义对一个文件的权限管理。此外,为了方便管理我们可以将用户分组。分组用一个单位,一般位于文件的前面。如下:
[groups]
calc-developers = harry, sally, joe
paint-developers = frank, sally, jane
admin = joe, frank, sally, jane
形式如下:
建立控制用户访问权限的文件svn-access-filename
[svn1:/] //这表示,仓库svn1的根目录下的访问权限
harry = rw // svn1仓库harry用户具有读和写权限
sally = r // svn1仓库sally用户具有读权限
[svn2:/] //svn2仓库根目录下的访问权限
harry = r // harry用户在svn2仓库根目录下只有读权限
sally = // sally用户在 svn2仓库根目录下无任何权限
[svn2:/src] //svn2仓库下src目录的访问权限
harry=rw
sally=r
[/] // 这个表示在所有仓库的根目录下
* = r // 这个表示对所有的用户都具有读权限
[groups] // 这个表示群组设置
svn1-developers = harry, sally // 这个表示某群组里的成员
svn2-developers = sally
[svn1:/]
@svn1-developers = rw // 如果在前面加上@符号,则表示这是个群组权限设置
然后修改httpd.conf配置:
<Location /svn>
DAV svn
SVNParentPath /svn
AuthType Basic
AuthName “Subversion repository”
AuthUserFile /svn-auth-filename (保存用户名和密码)
Require valid-user
AuthzSVNAccessFile /svn-access-filename(保存用户访问的权限策略)
</Location>
[calc:/trunk/]
harry = rw
sally = r
@=rw
设置calc工程中/trunk的权限.其中harry对其有读和写权限,sally有读的权限,组admin有读写权限(注意,组名前面有一个@符号).
上面定义针对多个库的情况,若只有一个可写为:
[ /trunk/]
harry = rw
sally = r
若要设置所有用户对根目录的权限,为:
[/]
*=r
权限管理的工作原理:默认情况下对所有文件夹是有读写权限的;对于父文件的权限会被子文件夹和文件继承;对于子文件权限的定义会覆盖由父文件继承来的权限规则。当某用户访问某一文件夹时,首先会寻找是否对此文件夹下此用户进行了设置,若设置了就采用该规则;否则,就找他的父文件夹,若还是没有对该文件夹定义,则继续向上。直到根目录。若仍没有,就采用默认。
Ok。如果我们向增加安全性,可以让apache采取SSL方式发布,需要两步,首先是制作证书,然后是配置管理文件.
6 制作证书.
有两种方式,使用openssl和使用第三方工具opesnVPN.
A 使用openssl。
你需要准备openssl.exe和openssl.cnf。
openssl.exe在..\apache\Apache2\bin下(注意只有支持SSL的apache安装后才有,也可下载http://hunter.campbus.com/);openssl.cnf下载http://tud.at/programm/openssl.cnf并拷贝到..\apache\Apache2\bin下.
好了,开始制作了,在命令行下定位到..\apache\Apache2\bin,运行:
$openssl req -config openssl.cnf -new -out active.csr
然后回答相关问题来制作一个证书active.csr.这个证书实际就是一个用公私密钥加密的文本文件,它需要被第三方机构授权.
$openssl rsa -in privkey.pem -out active.key
得到密钥.
$openssl x509 -in active.csr -out active.cert -req -signkey active.key -days 4000
得到使用密钥加密了的证书,有效期为4000天.
$openssl x509 -in active.cert -out active.der.crt -outform DER
Der形式的证书。
好了,现在,我们有文件:
l active.der.crt(certificate of DER style)
l active.csr
l active.key(private key)
l .rnd,
l privkey.pem
l active.cert(certificate of PEM style)
7 配置文件
把文件active.der.crt和active.key拷贝到..\Apache Group\Apache2\conf\ssl
打开文件httpd.cnf,将下面行前的注释去掉:
LoadModule ssl_module modules/mod_ssl.so
打开文件..\Apache Group\Apache2\conf\ssl.cnf,确保以下行是没有注释掉的.
DocumentRoot "../Apache Group/Apache2/htdocs"
ServerName www.active.com:443
ServerAdmin eric.du@active.com
ErrorLog logs/error_log
TransferLog logs/access_log
SSLMutex default
SSLRandomSeed startup builtin
SSLSessionCache none
(SSLSessionCache确保其他行是注释的)
做以下两个更改:
SSLCertificateFile conf/ssl.crt/server.crt
-à SSLCertificateFile conf/ssl/active.der.crt
SSLCertificateKeyFile conf/ssl.key/server.key
--> SSLCertificateKeyFile conf/ssl/active.key
去掉或注释以下两行:
# ifDefine SSL
# ifDefine
好了,重启apache,测试访问:https://localhost和https://localhost/svn.
现在我们可以通过http和https两种方式访问.如果我们强制要求使用https或对http自动重定向为https.就需要参考下面:
8 强制SSL和自动重定向
打开httpd.conf,进行配置.
如果只是要求subversion库使用此策略,则就将下面的命令放在…< Location>中,若是整个apache,则放在…中.
1) 强制
SSLRequireSSL
2) 自动重定向
RewriteEngine on
RewriteCond %{REMOTE_ADDR} !^172\.31\.224\.[0-9]+$
RewriteCond %{HTTPS} !on [NC]
RewriteRule .* - [F]