文章来源: 哥德巴赫猜想

本文主要是分析SVN服务器中用户权限的配置,作为SVN服务器基本配置的提高篇。如果读者还未了解SVN服务器的基本配置,可以参见本人的另外一篇博文《使用自己的Linux svnserve服务器》,链接:http://blog.chinaunix.net/u/33048/showart_1890997.html,本文中下面简称《基础篇》。

     本文欢迎自由转载,但请标明出处和本文链接,并保持本文的完整性。

     CU Godbach

Bloghttp://blog.chinaunix.net/u/33048/index.html

Oct 26, 2009

 

在实际的项目开发中,有新的成员加入进来。这就需要在SVN服务器上为其添加一个账户。但是,由于某些原因,又不希望该用户能能够读取服务器上的所有文件。这时,就需要为该账户设置一些权限,使之可以去SVN服务器上取下某些特征目录的文件,或者不能取出某些特征目录的文件。如何实现呢?

在本人《基础篇》中讲到了如何配置svnserve.confpasswd两个文件,而没有讲解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个子目录,分别为foosecret1, secret2。对于harrysally,我们只想让他们对foo有读写权限,对secret1有只读权限,对secret2没有读写权限,john有整个版本库的读写权限,则authz文件的配置如下:

[groups]

grp_limit = harry,sally

 

[/]

* = rw

 

[/secret1]

@grp_limit = r

[/secret2]

@grp_limit =

 

       简单说明一下配置。

       我们首先定义了一个特征用户组grp_limit用来表示harrysally

       [groups]

grp_limit = harry,sally

 

因为他们在整个版本库的权限都是一样的。

其次,我们定义所有用户对整个目录有读写权限:

[/]

* = rw

      

很显然,这样设置,保证了用户john所有目的读写权限,也保证了harrysallyfoo目录的读写权限。那么,下一步就是开始对harrysally进行权限的限制。

设置他们对子目录secret1的只读权限:

[/secret1]

@grp_limit = r

设置他们对不可读取子目录secret2

[/secret2]

@grp_limit =

可见,设置用户权限的时候,'='左侧代表用户名称,可以是实际用户名,也可以是定义的用户组名,但要用'@'作为前缀,或者是所有用户'*''='右侧代表设置的权限'r''rw'或者为空即代表用户对于该目录无任何权限。

3. 总结

1)用户某个目录的权限是向子目录递归的。如果用户对于/foo目录有读写权限,则该用户对于foo目录下的所有子目录都有读写权限。

2)权限分配,只可以分配到某个目录,而不能到某个文件

参考资料:

1 svn权限配置文件(authz)分析》 http://blog.csdn.net/saiya_kwok/archive/2009/02/20/3914294.aspx

GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐