1 概述
本文详细描述了Ubuntu 环境下,SVN Apache SSL架构的SVN服务器的搭建过程。通过https来访问SVN服务器,采用基于Apache的用户认证管理。用户的权限使用authz配置。
2 安装Ubuntu 8.10服务器
可以是Ubuntu 8.10 Server或者是Desktop。安装过程中创建一个用户名为administrator的系统帐户,作为本服务器日常管理帐户。另外,为了方便后续的说明,假设服务器的ip地址为192.168.19.3。
安装完成后,需要先运行更新管理器,以获得最新的源列表。
3 安装Apache服务器
在新立得软件包管理器里面,搜索apache2并选择安装Apache2,libapache2-svn。安装完成后,确认能通过http访问http://192.168.19.3。正常情况下,会得到如下界面:
说明apache已经正常工作了。
4 创建SVN服务器
4.1 安装SVN
在新立得软件包管理器里面,搜索subversion,并选择安装subversion,subversion-tools。安装好之后,进入下一步。
4.2 增加组
方法如下:
l 在 Ubuntu 菜单上选择“系统->系统管理->用户和组”;
l 切换到“组”标签;
l 点击“添加组”按钮;
l 组名为“subversion”;
l 将您自己(administrator)和“www-data”(Apache 用户)加入组成员中;
l 点击“OK”以确认修改,关闭该程序。
或者直接使用命令,增加组和成员:
sudo addgroup subversion
sudo usermod -G subversion -a www-data administrator
当然,修改组也可以直接修改组文件: sudo vi /etc/group。
然后需要注销(我都是直接重新启动)再登录以便能够真正成为 subversion 组的一员。
4.3 创建SVN仓库
现在执行下面的命令
# cd /home
# sudo mkdir svn
#/usr/local/svn# sudo chown -R www-data:subversion svn
#/usr/local/svn# sudo chmod -R g rws svn
最后的一条命令赋予组成员对所有新加入文件仓库的文件拥有相应的权限。
下面的命令用于创建 SVN 文件仓库:
#sudo svnadmin create /home/svn
4.4 配置Apache服务器
先备份一下Apache2的配置文件,执行如下命令:
#/usr/local/svn# sudo cp -R /etc/apache2 /etc/apache2_bak
通过 WebDAV 协议访问 SVN 文件仓库,您必须配置您的 Apache 2 Web 服务器。您必须加入下面的代码片段到您的 /etc/apache2/mods-available/dav_svn.conf中:(加在文件最后面即可)
<Location /svn >
DAV svn
SVNPath /home/svn
AuthType Basic
AuthName "welcome to subversion repository"
AuthUserFile /etc/subversion/passwd
#<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
#</LimitExcept>
</Location>
如果需要用户每次登录时都进行用户密码验证,请将<LimitExcept GET PROPFIND OPTIONS REPORT>与</LimitExcept>两行注释掉。
当您添加了上面的内容,您必须重新启动 Apache 2 Web 服务器,请输入下面的命令:
sudo /etc/init.d/apache2 restart
接下来,您需要创建 /etc/subversion/passwd 文件,该文件包含了用户授权的详细信息。要添加用户,您可以执行下面的命令:
sudo htpasswd -c /etc/subversion/passwd superman
它会提示您输入密码,当您输入了密码,该用户就建立了。您可以通过下面的命令来访问文件仓库:
你还可以继续创建其他用户,但是不能再用-c选项了,因为-c选项表示创建一个新的用户授权文件,一旦选用,原有的授权文件就被覆盖了。
sudo htpasswd /etc/subversion/passwd user_name
此时,应该就可以通过web方式访问svn服务器了。在浏览器的地址栏输入http://192.168.19.3/svn/会弹出用户验证的窗口:
输入正确的用户名和口令后,就能看到如下界面:
5 配置SSL
这里可以参考:http://www.cnblogs.com/passos/archive/2006/02/18/332992.html
关于SSL的配置很多,这里我根据实际情况,做了一个简单实用的SSL加密机制。方法如下:Apache2在Ubuntu 系统内的基本情况如下:
l 默认站点在 /var/www/
l 配置文件在 /etc/apache2/
l 日志在 /var/log/apache/
l 启动脚本是 /usr/sin/apache2ctl 或者 /etc/init.d/apache2
Apache2已经在前面第2步安装好了,下面安装SSL模块:
安装SSL模块
sudo a2enmod ssl
我们可以使用openssl来创建,这里我就是此方法创建SSL证书的。
#sudo openssl req -x509 -newkey rsa:1024 -keyout apache.pem -out apache.pem -nodes -days 999
注:在要求输入Common Name (eg, YOUR name) 时,输入你的主机名。
示例过程如下:
#sudo openssl req -x509 -newkey rsa:1024 -keyout apache.pem -out apache.pem -nodes -days 999
Generating a 1024 bit RSA private key
.....................
..
writing new private key to 'apache.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:China
string is too long, it needs to be less than 2 bytes long
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:Beijing
Locality Name (eg, city) []:Haidian
Organization Name (eg, company) [Internet Widgits Pty Ltd]:ABC
Organizational Unit Name (eg, section) []:Dep9
Common Name (eg, YOUR name) []:SvnServer
Email Address []:111@gmail.com
此时/home/administrator目录下就有了一个apache.pem的文件
创建目录,存放证书文件
sudo mkdir /etc/apache2/ssl
复制一份站点配置做为SSL配置的原型
#sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/ssl
#sudo ln -s /etc/apache2/sites-available/ssl /etc/apache2/sites-enabled/ssl
然后编辑SSL的配置
#sudo vi /etc/apache2/sites-enabled/ssl
把端口改为443(默认是80),加入SSL认证配置,其它的根据需要自己定制 与普通配置无异,以下蓝色字体为新添加的:
<VirtualHost *:443>
ServerSignature On
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/apache.pem
ServerAdmin webmaster@localhost
DocumentRoot /var/www/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options ExecCGI -MultiViews SymLinksIfOwnerMatch
编辑Apache端口配置,去掉80端口的监听:
#sudo vi /etc/apache2/ports.conf
NameVirtualHost *:80
#Listen 80
<IfModule mod_ssl.c>
# SSL name based virtual hosts are not yet supported, therefore no
# NameVirtualHost statement here
Listen 443
</IfModule>
这里可以不用加“Listen 443”因为SSL默认认证的443端口已经打开。
别忘了把前面生成的SSL密钥文件拷贝过来
sudo cp /home/administrator/apache.pem /etc/apache2/ssl/
最后重新启动apache服务:
sudo /etc/init.d/apache2 restart
然后
netstat –an|grep :443
如果443已经打开,则说明https服务已经启动了。在浏览器上再验证一下:
https://192.168.19.3/svn
选择“是”则弹出如下验证窗口:
输入superman和口令之后:
说明加密的http访问svn也成功了。