Java, Python, Jython and .NET.

IBM iCATE, SUN SCJP. A staff in Microsoft China R&D Group... Isn't it funny? Enjoy life...
随笔 - 23, 文章 - 0, 评论 - 171, 引用 - 2
数据加载中……

Subversion配置安装教程(二)

    今天接着昨天的内容讲Subversion的安全配置。在上一讲中我们在Apachehttpd.conf文件里加入了这样一节:
<Location /svn>
DAV svn
SVNParentPath e:\SVN
AuthType Basic
AuthName "Subversion repositories"
AuthUserFile passwd
#AuthzSVNAccessFile svnaccessfile
Require valid-user
</Location> 
    下面我来解释一下这些配置信息用途:

<Location /svn>

说明我们所有的代码仓库在/svn这个虚拟目录下

DAV svn

说明Apache会使用svn这个module来解析这个虚拟目录

SVNParentPath e:\SVN

说明所有的代码仓库都在本地硬盘的e:\SVN

AuthType Basic

使用最基本的认证校验,用户名/密码

AuthName "Subversion repositories"

说明在认证对话框弹出的时候,对话框的标题显示,你可以把它修改成你想要的任何提示信息,比如:AuthName "Warning"等等

AuthUserFile passwd

说明我们使用的access list文件的名字,在上一讲中我们建立的文件名字是passwd,所以这里是passwd。如果你建立的文件名字是其他的,这里要作相应的改动

AuthzSVNAccessFile

说明svn自己控制的access list文件,这个文件很重要,可以丰富svn的安全配置,在下面会讲到

Require valid-user

说明只有输入正确的用户名/密码才能访问


上述的配置只能是最简单的安全配置,如果你想拥有更强大的安全配置,就需要加入一些东西了。比如:

  1. 如果你想让所有的匿名用户能访问代码仓库,对某些特定用户才开放可写的权限,则需要把 
    Require valid-user
    改成
    <LimitExcept GET PROPFIND OPTIONS REPORT>
    Require valid-user
    </LimitExcept>
  2. 如果你对于代码仓库里面某些目录还有更细致的访问控制,只用passwd就没办法啦,这个时候我们就需要AuthzSVNAccessFile文件了,去掉#AuthzSVNAccessFile svnaccessfile这一行前面的注释。Apache首先会使用passwd校验用户名和密码,然后会认证信息传给SubversionAuthzSVNAccessFile模块,由这个模块作更进一步的权限控制。首先我们来新建一个文件svnaccessfile,内容如下:
    [groups]
    developers = user1,user2,user3,user4
    docs = user5,user6,user7
    #to allow everyone read access
    [/]
    * = r
    #allow all developers complete access
    @developers = rw
    #give the doc people write access to the docs folder
    [/project/trunk/doc]
    @docs = rw
    首先我们定义了两个group,一个是developer,代表开发组,另外一个是docs,代表文档撰写组,然后
    [/]
    * = r
    意思是对于所有的用户开放可读的权限。注意这里的[/],表示是对根目录下的所有代码仓库赋予权限。接着是
    @developers = rw
    [/project/trunk/doc]
    @docs=rw                                                                                                                                                                                                                                                                  
    这这里的@应该代表的是group的意思(这个还没有确认,是我自己猜测的,因为如果是直接给单一用户赋予权限,则不需要前面的@,哪位大侠可以证实一下我的猜测?欢迎指教)注意这里对于docs这个组,我们一样指定了目录路径,而不是对于整个代码仓库。

    这里再说说SVNParentPath,配置了SVNParentPath,以后每次在根目录下面加入新的repository就不需要再重新配置SubversionApache了,自动获取了根目录的配置信息,很方便。然而这也引发了另外一个问题,当你在浏览器地址栏里输入http://youserver/svn/的时候,服务器会报错,提示你没有权限访问访问这个url,我们想要的效果是浏览到这个url时能够把根目录下的所有的repository列出来。完成这个工作需要写点代码了,使用的工具可以是很多,这里使用php,当然我想用perl或者python一定是没有问题。首先要安装php,使apache支持php. 以下是参考了shg918的文档,在此表示感谢!


  1. 首先去http://www3.skycn.com/soft/9122.html 下载php4.3.1,接下来我们来手动配置一下apache
  2. 将下载的php压缩文件解压,文件夹改名为php复制到你想放置的目录路径下,注意目录名不能有空格,否则apache会找不到相关的module,比如D:/php-4.3.10RC1-Win32
  3. 打开刚才解压的PHP目录,你会发现有一个叫做"php.ini-dist"的文件,这就是PHP的配置文件了,你需要把它改名成"php.ini",然后复制到系统目录windows2K应该是winnt)下。打开这个配置文件,把; cgi.force_redirect = 1改成 cgi.force_redirect = 0,这样做是强迫不运行在cgi模式下,我们希望php工作在Apachemodule模式下。
  4. PHP安装目录下的"php4ts.dll"必须要复制到windows系统的system32目录下。
  5. dllsextensions目录里的所有文件拷到system32里。(我猜测这里是为了支持mysql等才需要作的,可能对我们来说并不需要。)
  6. 打开Apache的配置文件http.conf,在module配置节末尾加上LoadModule php4_module D:/php-4.3.10RC1-Win32/sapi/php4apache2.dllAddType application/x-httpd-php .php .php3 .php4

Ok,配置完毕,现在Apache可以支持php了。现在用文本编辑器编写一个php文件,保存为svn_index.php,内容如下:

<html>

<head>

<title>Subversion Repositories</title>

</head>

<body>

 

<h2>Subversion Repositories</h2>

<p>

<?php

    $svnparentpath = "e:/svn";

    $svnparenturl = "/svn";

 

    $dh = opendir( $svnparentpath );

    if( $dh ) {

        while( $dir = readdir( $dh ) ) {

            $svndir = $svnparentpath . "/" . $dir;

            $svndbdir = $svndir . "/db";

            $svnfstypefile = $svndbdir . "/fs-type";

            if( is_dir( $svndir ) && is_dir( $svndbdir ) ) {

                echo "<a href=\"" . $svnparenturl . "/" .

                        $dir . "\">" . $dir . "</a>\n";

                if( file_exists( $svnfstypefile ) ) {

                    $handle = fopen ("$svnfstypefile", "r");

                    $buffer = fgets($handle, 4096);

                    fclose( $handle );

                    $buffer = chop( $buffer );

                    if( strcmp( $buffer, "fsfs" )==0 ) {

                        echo " (FSFS) <br />\n";

                    } else {

                        echo " (BDB) <br />\n";

                    }

                } else {

                    echo " (BDB) <br />\n";

                }

            }

        }

        closedir( $dh );

    }

?>

</p>

</body>

</html>


上述php文件中svnparentpath = "e:/svn";需要注意,你的subversion的代码仓库的根目录可能并不在e:/svn,请修改和你自己设置一样的路径。更改Apache的配置文件http.conf文件,把#LoadModule rewrite_module modules/mod_rewrite.so前面的注释去掉。然后在文件末尾加上如下几句:

RewriteEngine on

RewriteRule ^/svn$ /svn_index.php [PT]

RewriteRule ^/svn/$ /svn_index.php [PT]

RewriteRule ^/svn/index.html$ /svn_index.php [PT]

好了,请从新在浏览器地址栏中输入http://youserver/svn ,你会发现Apache会把当前Subversion根目录下的所有代码仓库列出来了。如图:

今天就讲到这里吧,明天继续讲解Subversion的SSL加密连接的设置。

posted on 2005-02-09 10:46 doudou 阅读(12399) 评论(29)  编辑 收藏 网摘 所属分类: 原创(开源技术和.Net)

评论

#1楼   回复  引用  查看    

svnaccessfile文件放在哪个目录中?
2005-02-19 12:11 | dudu      

#2楼   回复  引用    

你就翻译了TortoisSVN的help而已,^_^
不过我今天配置的时候出了一点问题,匿名还好
一切正常,用apache的身份验证的时候就无论我怎么输入密码都不行了
原来怀疑是IE的问题,因为登录不了的提示还有一点:可能是浏览器不知道怎么发送验证信息。后来我换了FireFox,当然之前就用了TortoisSVN的文件浏览器咯。就是不对。我用的apache2.0.52
SVN1.13;查了很久的资料就是找不到原因,我什么地方忽略了,我不知道了。
天津教育科研网让我们学校发扬风格,所以我们的网管中心对于学生宿舍就只留下80,还有qq的端口了。我在我们的服务器上装的是svn自带的服务,当然就不能用了,郁闷死了。
如果有这方面的消息和资料请转告
yi_can@163.com
谢谢!!
2005-02-19 13:51 | vulcan

#3楼[楼主]   回复  引用  查看    

呵呵,说的没错,加了一点自己的东西,但是这个是一系列的文章之一。至于你说的问题我还没有碰到啊。不过建议你去Apache的log日志看看,说不定会发现问题的原因。在这里:$\Program Files\Apache Group\Apache2\logs,注意看看access.log和error.log
2005-02-19 14:01 | doudou      

#4楼[楼主]   回复  引用  查看    

可能是你的ie浏览器的问题,看看这个:“如果您要访问某安全站点,请确保您的安全设置能够支持。请单击工具菜单,然后单击 Internet 选项。在“高级”选项卡上,滚动到“安全”部分,复选 SSL 2.0、SSL 3.0、TLS 1.0、PCT 1.0 设置。” 对不起,没有仔细看你的问题,不是ssl访问的问题,建议你还是看看apache的log日志。
2005-02-19 14:22 | doudou      

#5楼[楼主]   回复  引用  查看    

再回dudu老大的问题,这个svnaccessfile文件应该还是放在$:\Program Files\Apache Group\Apache2根目录下,因为对于apache的配置文件http.conf来说,默认的没有加路径名称就是$:\Program Files\Apache Group\Apache2根目录,这一点也可以从
AuthUserFile passwd
#AuthzSVNAccessFile svnaccessfile
看出来,passwd文件和svnaccessfile 平级,关于这一点我在Subversion配置安装教程(一) 中也提到过。
2005-02-19 14:43 | doudou      

#6楼   回复  引用    

我在机器上按照作者的说法配置好,访问http://local:8080/svn时,总是说我没有访问权限,我查了apache的error.log,发现总是报这个错误: The URI does not contain the name of a repository. [403, #190001],不知道原因在哪里?
2005-03-02 15:43 | panming

#7楼   回复  引用    

svn_index.php 文件应该具体放在什么位置?
2005-03-02 16:01 | panming

#8楼[楼主]   回复  引用  查看    

除非你改了http.conf配置文件,否则默认的在这里:$Apache Group\Apache2\htdocs。这几天败了一个MS的smartphone,没怎么干正事。呵呵
2005-03-03 15:59 | doudou      

#9楼   回复  引用    

svn_index.php应该放在apache
documentroot指向的目录中
2005-03-30 22:42 | lurker

#10楼   回复  引用    

写的不错。

我有一个问题想请教。

我在设置svnaccessfile的时候,
定义路径时好像不支持中文目录。不知可有什么办法?
2005-04-27 23:22 | cool02

#11楼   回复  引用    

svnaccessfile文件是怎么建立的?
2005-05-08 10:51 | xy

#12楼   回复  引用  查看    

我也遇到了vulcan提到的问题,查看error.log 发现提示can't open svn-auth-file,就是我放passwd的文件,于是把它的权限改成了777(linux下的),然后重启apache就ok了
2005-05-11 16:14 | circulate      

#13楼   回复  引用    

是不是不支持中文目录
2005-05-18 16:36 | 曹杰

#14楼   回复  引用    

我的老是在提交或者导入的时候报错。
401 authlization required。
没辙了
2005-06-16 15:07 | 矿泉水

#15楼   回复  引用    

我的老是在提交或者导入的时候报错。
401 authlization required。
没辙了
2005-06-16 15:07 | 矿泉水

#16楼   回复  引用    

我有一个与前面曹先生同样的问题,subversion+apache的按目录进行访问控制,是不是不支持"中文目录名"?,

我很困惑.
2005-09-15 11:47 | 西土卫屋[未注册用户]

#17楼   回复  引用    

求救
我的配置是这样的:
<Location /svn>
DAV svn
SVNParentPath D:\SVN
AuthType SSPI
AuthName "Subversion repositories"
SSPIAuth On
SSPIAuthoritative On
SSPIDomain <domaincontroller>
SSPIOfferBasic On
#SSPIBasicPreferred On
#AuthUserFile passwd
AuthzSVNAccessFile D:\\apachefriends\\xampp\\apache\\access.txt
#<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
#</LimitExcept>
</Location>
access.txt文件内容是这样的:
[group]
admin = "JUNCIUS\administrator"
dev = "JUNCIUS\juncius"
[/]
* = rw
[SDKExercise:/]
@admin = rw
@dev = r
我用本机作试验,机器上有administrator和juncius用户,但是我每次把*=rw改成*=r的时候,我对SDKExercise项目的commit总是失败,而改成*=rw的时候,不管SDKExercise:/]下面用户组的权限怎么设置,都能commit成功,请问问题在哪里?我怀疑][SDKExercise:/]的写法有问题,但是我是参考svn的help文档的呀?救命
2005-12-17 22:56 | juncius[未注册用户]

#18楼   回复  引用    

我的qq是34034872,我的msn是juncius@hotmail.com,能否在上面向您请教
2005-12-17 23:02 | Juncius[未注册用户]

#19楼   回复  引用    

.net如何安装.请高人指教谢谢~~~
QQ:178330021
邮箱:178330021@163.com
2006-07-23 23:17 | huangfu[未注册用户]

#20楼[楼主]   回复  引用  查看    

@矿泉水
你的权限不够
2006-08-11 23:11 | doudou      

#21楼[楼主]   回复  引用  查看    

@juncius
只有r的权限,当然不能写入了。rw就就可以了
2006-08-11 23:12 | doudou      

#22楼[楼主]   回复  引用  查看    

@西土卫屋
默认应该不支持吧,我没有用过中文目录。但是apache肯定是可以支持unicode的,svn也应该没问题,可能需要设置一下
2006-08-11 23:14 | doudou      

#23楼   回复  引用    

Ok,配置完毕,现在Apache可以支持php了。现在用文本编辑器编写一个php文件,保存为svn_index.php,内容如下:

我的显示怎么和源代码一样啊
如下
<head>

<title>Subversion Repositories</title>

</head>

<body>



<h2>Subversion Repositories</h2>

<p>

<?php

$svnparentpath = "e:/svn";

$svnparenturl = "/svn";等等


没有显示预期目录
2006-09-22 21:09 | kkeric [未注册用户]

#24楼   回复  引用    

难道那段代码有错误?
2006-09-22 21:16 | kkeric [未注册用户]

#25楼   回复  引用    

kkeric :

你的PHP库是不是没有安装正确.
2006-12-15 09:15 | snox[匿名][未注册用户]

#26楼   回复  引用    

如果正确了,请重启动APACHE
2006-12-15 09:16 | snox[匿名][未注册用户]

#27楼   回复  引用    

回复panming
你的访问路径是针对多库的,而你的配置文件配置的权限不是多库,你可以写成 “http://localhost:端口号/svn/你的库名
2007-05-25 09:59 | 小野猫[未注册用户]

#28楼   回复  引用    

你的关于subvision的教程是我看过的最棒的,谢谢!
http://www.mofun.cc
2009-02-15 13:22 | 魔方网[未注册用户]



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 103500




相关文章:

相关链接: