SVN的权限设置信息记录在authz这个文件中。如果对含有中文名称的文件夹进行权限管理,需要把authz保存为UTF-8格式。不推荐使用Windows的记事本保存为UTF-8格式,可以用UltraEdit或者EditPlus等文本编辑工具。
权限分配时,应遵守从根目录到子目录、从最宽泛权限到最精细权限、从只读权限到读写权限的设置原则。即从根目录开始设置最宽泛的访问权限,然后逐步设置子目录的具体访问权限。
SVN下载地址:
服务端 http://subversion.tigris.org
客户端 http://tortoisesvn.net/
现举例说明SVN权限分配:
单资源库的配置
假设repos1是SVN的一个资源库,其路径是D:\svnrepos\repos1(创建资源库的命令行是D:\svnrepos>svnadmin create repos1)在库中有2个资源项目:project1_1和project1_2
在repos1\conf中,有三个文件:svnserve.conf、authz、passwd 下面分别对各文件的配置进行说明:
svnserve.conf
说明:文件中每一行最前面都不能有空格,而以#开头的是注释。
找到以下几行:
# anon-access = read
# auth-access = write
# password-db = passwd
# authz-db = authz
1.把#和#后面的空格去掉。
2.把anon-access = read改为anon-access = none 这样配置表示不让匿名用户访问资源。
3.auth-access = write表示通过验证的用户拥有写权限;password-db = passwd表示用户名和密码放在passwd文件;authz-db = authz表示项目权限设置放在authz文件。
passwd
假设该文件已做了如下设置:
[users]
harry = harry
sally = sally
john = john
scott = abc123
说明:在[users]之下,就是所有设置的用户名和密码,每一行设置一个用户。等号左边是用户名,右边是密码。例如scott = abc123表示设置了一个用户名scott,密码abc123。如果想取消用户可以删除该行或者在该行的前面加#将其注释掉。
本文重点关注的是authz这个文件
authz
假设该文件已做了如下设置:
[groups]
admin = scott
user1 = harry,john
user2 = sally
说明:这一节点表示对用户组进行配置,等号左边是组名,右边是用户名。一个组中如有多个用户可使用逗号(,)分隔。用户名必须是passwd中有效的用户名。
[/]
@admin = rw
@user1 = r
@user2 = r
说明:这一节点表示对资源库repos的访问权限进行设置,用/来表示。
权限分为三种:r--只读,w--可写,留空不写--没有任何权限,每行权限设置不分先后顺序
使用组名时必须有@符号。@admin = rw表示admin组的用户对资源库所有的资源拥有读写权限
[/project1_1]
@user1 = rw
@user2 =
说明:该节点是对资源项目project1_1进行权限配置。可以看到user1组对资源项目project1_1拥有读写权限,而user2组没有任何权限。而对于admin组来说,也有读写权限。虽然这里没有明确写出。这涉及到了权限的继承性问题。因为在[/]节点的设置中,admin组的权限是rw,所以在这里也是rw
[/project1_2]
@user2 = rw
@admin = rw
john = r
* =
说明:该节点是对资源项目project1_2进行权限配置。可以为单个用户分配权限,而不一定要引用组名,比如john = r。看到这个节点的配置,你可能会有个疑问:这里为什么明确写出admin组的权限,不是可以继承吗?这是因为使用了星号(*)通配符。星号在这里代表除了已经明确写出权限的用户组和用户外,其他的用户组和用户,即代表user1组和用户harry。如果不明确写出admin组的权限,则admin组的权限将由星号的权限来决定。所以在使用星号时要小心,因为它会切断权限的继承性。
多资源库的配置
在之前单资源库的基础上,我们假设还有一个资源库repos2,其路径是D:\svnrepos\repos2,在库中也有2个资源项目:project2_1和project2_2。此时的配置我们需要考虑两种情况:
第一种:每个资源库使用不同的用户和用户组
此种情况,只需按照之前单资源库的配置说明,对资源库repos2进行相应的配置即可。只是启动服务的命令行不同:
单资源库是 D:\svnrepos>svnserve -d -r repos1
多资源库是 D:\>svnserve -d -r svnrepos
启动多资源库的服务时,不再指向某个库文件夹,而是库文件夹的上级文件夹。
访问资源项目的url也不同,比如:
单资源库是 svn://192.168.0.10
多资源库是 svn://192.168.0.10/repos1
访问多资源库时需要指明资源库名。
第二种:多个资源库使用相同的用户和用户组
假设资源库repos2的用户和用户组与repos1是一样的,对于这种情况,我们需要做以下配置:
1.把repos1的passwd和authz复制到D:\svnrepos下
2.修改repos1和repos2的svnserve.conf文件:
password-db = passwd改为password-db = /svnrepos/passwd
authz-db = authz改为authz-db = /svnrepos/authz
3.配置D:\svnrepos下的authz文件,假设配置如下,可以看出和单资源库的配置最大的不同就是每个资源项目节点名中都以资源库名作为前缀
[groups]
admin = scott
user1 = harry,john
user2 = sally
[repos1:/]
@admin = rw
@user1 = r
@user2 = r
[repos1:/project1_1]
@user1 = rw
@admin = rw
* =
[repos1:/project1_2]
@user2 = rw
@user1 =
[repos2:/]
@admin = rw
@user1 = r
@user2 = r
[repos2:/project2_1]
@user1 = rw
@admin = rw
* =
[repos2:/project2_2]
@user2 = rw
@admin = rw
* =
关于SVN服务
如果要把SVN服务设置成Windows系统服务,使用如下命令行:(假设SVN服务端安装在D:\Subversion)
注意等号后面的空格是必须的。
单资源库:
sc create SVNService binpath= "D:\Subversion\bin\svnserve.exe --service -r D:\svnrepos\repos1" displayname= "SVNService" depend= Tcpip start= auto
多资源库:
sc create SVNService binpath= "D:\Subversion\bin\svnserve.exe --service -r D:\svnrepos" displayname= "SVNService" depend= Tcpip start= auto