work hard
分类: 系统运维
2009-10-26 22:04:17
本文主要是分析SVN服务器中用户权限的配置,作为SVN服务器基本配置的提高篇。如果读者还未了解SVN服务器的基本配置,可以参见本人的另外一篇博文《使用自己的Linux svnserve服务器》,链接:http://blog.chinaunix.net/u/33048/showart_1890997.html,本文中下面简称《基础篇》。
本文欢迎自由转载,但请标明出处和本文链接,并保持本文的完整性。
CU: Godbach
Blog:http://blog.chinaunix.net/u/33048/index.html
Oct 26, 2009
在实际的项目开发中,有新的成员加入进来。这就需要在SVN服务器上为其添加一个账户。但是,由于某些原因,又不希望该用户能能够读取服务器上的所有文件。这时,就需要为该账户设置一些权限,使之可以去SVN服务器上取下某些特征目录的文件,或者不能取出某些特征目录的文件。如何实现呢?
在本人《基础篇》中讲到了如何配置svnserve.conf和passwd两个文件,而没有讲解authz文件的配置。因为当时搭建的SVN服务器上的所有文件对所有用户可见。本文要讲的就是authz文件的配置管理。该文件就是实现了对SVN用户的分组管理和权限设置。
1. authz文件分析
下面先看一下authz文件的默认内容:
###
This file is an example authorization file for svnserve.
###
Its format is identical to that of mod_authz_svn authorization
###
files.
###
As shown below each section defines authorizations for the path and
###
(optional) repository specified by the section name.
###
The authorizations follow. An authorization line can refer to a
###
single user, to a group of users defined in a special [groups]
###
section, or to anyone using the '*' wildcard.
Each definition can
###
grant read ('r') access, read-write ('rw') access, or no access
###
('').
[groups]
#
harry_and_sally = harry,sally
#
[/foo/bar]
#
harry = rw
#
* =
#
[repository:/baz/fuz]
#
@harry_and_sally = rw
#
* = r
文件内容上半部分是注释,讲解authz的相关配置方法。大致内容就是该文件可以对普通一个用户、定义的一个用户组或所有的用户进行权限配置。其中用户组通过在[group]这一节定义。随后在设置用户权限的时候,定义在某用户组的用户则用“@用户组名”表示,所有用户通过'*'来表示。注意:该文件中出现的所有用户名都需要在passwd文件中定义过了。
用户的权限就分只读('r')、读写('rw')和禁止访问('')。
这里要补充说明的是authz文件中对版本库路径的表示方法。用'[/]'来表示版本库的根目录,如果有子目录foo,设置该目录权限时用'[/foo]'即可,其他任何目录都以'/'为版本根目录进行表示。
2. 举例
在举例之前,我们要先修改svnserve.conf文件。《基础篇》没有讲解authz的配置,svnserve.conf中并没有开启authz的验证功能,这部分内容如下:
### 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
因此,这里需要先做关键的一步,开启authz的验证功能,即删除注释符'#'即可:
authz-db = authz
这样,当有用户访问版本库的时候,就会触发到svnserve.conf配置文件中的这一行,进而会进到atuhz文件中就验证。
下面开始我们的举例分析。假设我们在passwd定义了如下用户:
[users]
harry = harrypasswd
sally = sallypasswd
john = johnpasswd
版本库根目录下有3个子目录,分别为foo,secret1, secret2。对于harry和sally,我们只想让他们对foo有读写权限,对secret1有只读权限,对secret2没有读写权限,john有整个版本库的读写权限,则authz文件的配置如下:
[groups]
grp_limit = harry,sally
[/]
* = rw
[/secret1]
@grp_limit = r
[/secret2]
@grp_limit =
简单说明一下配置。
我们首先定义了一个特征用户组grp_limit用来表示harry和sally:
[groups]
grp_limit = harry,sally
因为他们在整个版本库的权限都是一样的。
其次,我们定义所有用户对整个目录有读写权限:
[/]
* = rw
很显然,这样设置,保证了用户john所有目的读写权限,也保证了harry和sally对foo目录的读写权限。那么,下一步就是开始对harry和sally进行权限的限制。
设置他们对子目录secret1的只读权限:
[/secret1]
@grp_limit = r
设置他们对不可读取子目录secret2:
[/secret2]
@grp_limit =
可见,设置用户权限的时候,'='左侧代表用户名称,可以是实际用户名,也可以是定义的用户组名,但要用'@'作为前缀,或者是所有用户'*'。'='右侧代表设置的权限'r'、'rw'或者为空即代表用户对于该目录无任何权限。
3. 总结
(1)用户某个目录的权限是向子目录递归的。如果用户对于/foo目录有读写权限,则该用户对于foo目录下的所有子目录都有读写权限。
(2)权限分配,只可以分配到某个目录,而不能到某个文件
参考资料: