Subversion 基于 Apache 使用时用户权限的管理配置

一、Subversion 的两种使用方式:
1、Apache 站点方式;
2、本地命令行方式。
当然,我们可以通过客户端来进行访问,但那也必须先建立在上述两种访问接口。

二、Apache 方式的配置
首先我们需要安装 Apache 服务器程序,同时需要安装两个模块:mod_dav_svn 以及 mod_authz_svn。他们可以在 Subversion 的站点上找到,window 和 centos 平台 Subversion 的具体安装可以参照我之前的文章。将所有需要的模块安装之后,我们必须编辑 Apache 的配置文档,让其将我们要用的模块装载。一般来说,Apache 的配置文件是 httpd.conf。位置一般在 Apache 安装目录下的 conf 子目录中。而模块我们一般放在 modules 子目录中。我们在配置文件 httpd.conf 中加入:

LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so

这样,Apache 就可以访问 Subversion 的仓库了。

三、Apache 方式中项目的发布
首先还是要先建立 Subversion 的项目,例如:

svnadmin create –fs-type fsfs –pre-1.6-compatible /data/svn/repos1

如果不带参数,直接svnadmin create /data/svn/repos1,提交代码的时候有可能报错,另外要将/data/svn/repos1目录设置为提交用户可读写,否则提交代码也会报错。

svnadmin 位于 Subversion 安装目录的 bin 子目录。之后,在 httpd.conf 文件中加入:

<Location /repos1>
DAV svn
SVNPath /data/svn/repos1
</Location>

如果是想建立多个项目的话,可以使用另一种写法:

<Location /svn>
DAV svn
SVNParentPath /data/svn
</Location>

这样,凡是在 /data/svn 目录下的子目录, Apache 都交给 Subversion 的 DAV 去处理。用户即可以通过浏览器或者URL访问 Subversion 管理的项目了。

四、Apache 方式下的权限管理

首先,我们来创建一个用户 user1。由于是第一次创建用户,我们必须同时创建一个用户口令文件:

htpasswd -c /data/svn/passwd user1

htpasswd 位于 Apache 安装目录的 bin 子目录。这时,会提示输入用户密码以及确认用户密码。htpasswd 程序会将用户密码进行散列运算后保存在 /data/svn/passwd 中。创建第二个用户时,我们就不必输入 -c 开关了。

htpasswd /data/svn/passwd user2

如果想要删除某个用户,我们可以使用下列指令:

htpasswd -D /data/svn/passwd user2

这样,user2 就被从 /data/svn/passwd 中删除了。
这时,Subversion 的权限管理问题就转化为了 Apache 的权限管理问题了。我们将前述的目录配置做一下修改:

<Location /repos1>
DAV svn
SVNPath /data/svn/repos1
AuthType Basic
AuthName “Subversion repos1”
AuthUserFile /data/svn/passwd
Require valid-user
</Location>

这样,对 repos1 访问就必须提供 /data/svn/passwd 中记录的用户和正确密码才可以进行了。

五、Apache 方式下的分组管理
有时,我们希望能够将多个开发人员编为一组,使用组的方式来为项目设定权限。比如 repos1 项目只有属于 groupA 的成员才可以存取。下面我们来介绍其配置方法。这里,我们就要用到 mod_authz_svn 提供的功能了。我们对 httpd.conf 中的目录配置再做一次修改:

<Location /svn>
DAV svn
SVNParentPath /data/svn/
AuthType Basic
AuthName “Subversion repos1”
AuthUserFile /data/svn/passwd
AuthzSVNAccessFile /data/svn/authz
Require valid-user
</Location>

大家可以注意到,这里使用了另一个配置文件:/data/svn/authz,他的大致结构如下:

[groups]
admin = admin,manager #开发管理员组
dev1 = user1,user2,user3,user4 #开发用户组1

[/]
* = r #任何人对所有项目有读权限
@admin = rw #管理员组对所有项目有读写权限

[repos1:/]
@dev1 = rw #开发用户组1对项目有读写权限

Ok, 我想大家应该已经明白了基于组和项目的管理方法了。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据