在阅读本文之前,请确定你已经知道了Subversion基本的服务器管理,知道了svnserve或Apache的配置,清楚如何设置用户和密码。关于svnservee的配置可以看我们的《Subversion快速入门教程》和《用Apache和Subversion搭建安全的版本控制环境》,对于一些细节情参考《使用Subversion进行版本控制》。
作为一个配置管理员,需要管理用户的权限,本文主要介绍了使用Subversion的授权文件“authz-db”,同时为了叙述的清晰,我首先澄清一些概念。
很多情况下,往往一个库是不够的,我们会按项目,或按前编程语言类别,亦或是分工来建立多个库,而我们又想使用同一套认证,授权方案。那么本文就是基于这样的情形做介绍。
1. 认证(Authentication)和授权(Authorization)
这两个术语经常一起出现。其中认证的意思就是鉴别用户的身份,最常见的方式就是使用用户名和密码,授权就是判断用户是否具备某种操作的权限。在Subversion里提供了“authz-db”文件,实现了以路径为基础的授权,也就是判断用户是否有操作对应路径的权限。在Subversion 1.3之后,svnserve和Apache一样都可以使用“authz-db”文件。
2. SVN Serve下的配置文件
本文使用Subversion 1.7.9 http://sourceforge.net/projects/win32svn/files/1.7.9/apache22/
因为本文是以svnserve为例的,所以先介绍一下多版本库目录的结构:
─Repo
├─JavaRepo
│ ├─conf
│ ├─db
│ │ ├─revprops
│ │ │ └─0
│ │ ├─revs
│ │ │ └─0
│ │ ├─transactions
│ │ └─txn-protorevs
│ ├─hooks
│ └─locks
└─PHPRepo
├─conf
├─db
│ ├─revprops
│ │ └─0
│ ├─revs
│ │ └─0
│ ├─transactions
│ └─txn-protorevs
├─hooks
└─locks
JavaRepo/conf下的authz与passwd与PHPRepo/conf下的authz与passwd 拷贝另一目录下的一套(authz,passwd)到Repo目录下,其余的删掉即可。
分别修改配置文件conf/svnserve.conf
### The password-db option controls the location of the password
### database file. Unless you specify a path starting with a /,
### the file's location is relative to the directory containing
### this configuration file.
### If SASL is enabled (see below), this file will NOT be used.
### Uncomment the line below to use the default password file.
password-db = ../../passwd
### The authz-db option controls the location of the authorization
### rules for path-based access control. Unless you specify a path
### starting with a /, the file's location is relative to the the
### directory containing this file. If you don't specify an
### authz-db, no path-based access control is done.
### Uncomment the line below to use the default authorization file.
authz-db = ../../authz
将配置文件指向上上层目录
确保admin可以读写任何库;java开发人员只能读写JavaRepo;php开发人员只能读写PHPRepo,测试人员两个库都仅有可读权限;匿名用户不可访问任何库
修改passwd
[users]
#php开发
ch = ch0126
qh = qh0126
#java开发
hb = hb0126
qs = qs0126
#测试
ry = ry0126
修改authz
[groups]
admin_group = chaohai
java_group = haibao,qiushui
php_group = qinghai
test_group = ruoye
# 指定所有的版本库默认只读,admin_group组可读写
[/]
* = none
@admin_group = rw
# 指定对版本库JavaRepo根目录的权限
[JavaRepo:/]
# 未授权用户没有任何权限
* = none
@admin_group = rw
@java_group = rw
@test_group = r
# 指定对版本库PHPRepo根目录的权限
[PHPRepo:/]
# 未授权用户没有任何权限
* = none
@admin_group = rw
@php_group = rw
@test_group = r
创建windows服务
sc create SVNService binpath= "D:\SoftwareDevelopment\Subversion\svn-win32-1.7.9\bin\svnserve.exe --service -r D:\Repositories\SVN\Repo" displayname= "SVNService" depend= Tcpip start= auto
SC SVNService start