转自:
http://www.subversion.org.cn/index.php?option=com_content&task=view&id=84&Itemid=9
在阅读本文之前,请确定你已经知道了Subversion基本的服务器管理,知道了svnserve或Apache的配置,清楚如何设置用户和密码。关于svnserve的配置可以看我们的《Subversion快速入门教程》和《用Apache 和Subversion 搭建安全的版本控制环境》,对于一些细节情参考《使用Subversion进行版本控制》。
作为一个配置管理员,需要管理用户的权限,本文主要介绍了使用Subversion的授权文件“authz-db”,同时为了叙述的清晰,我首先澄清一些概念。
1,认证(Authentication)和授权(Authorization)
这两个术语经常一起出现。其中认证的意思就是鉴别用户的身份,最常见的方式就是使用用户名和密码,授权就是判断用户是否具备某种操作的权限,在Subversion里提供了“authz-db”文件,实现了以路径为基础的授权,也就是判断用户是否有操作对应路径的权限,在Subversion 1.3之后,svnserve和Apache一样都可以使用“authz-db”文件。
2. svnserve下的配置文件
因为本文是以svnserve为例的,所以先介绍一下版本库目录的结构:
D:\SVNROOT\PROJECT1
├─conf
├─dav
├─db
│ ├─revprops
│ ├─revs
│ └─transactions
├─hooks
└─locks
其中conf下面有三个文件:
authz
passwd
svnserve.conf
其中的“svnserve.conf”是这个版本库的配置文件,当使用svnserve时,这个配置文件决定了使用什么认证和授权文件:
password-db = passwd
authz-db = authz
上面的配置说明使用“svnserve.conf”同目录的passwd和authz,其中的password-db指定了用户密码文件,authz-db是我们的授权文件,也就是我们本文主要介绍的文件。
注意:使用Apache作为服务器时,根本就不会参考“svnserve.conf”文件的内容,而是会参考Apache的配置。
3,基于svnserve的版本库文件布局
使用svnserve时,为了管理的方便,应该使用相同的认证和授权文件,所以应该让所有版本库的配置文件svnserve.conf指向同一个password-db和authz-db文件。下面是一个多版本库的目录:
D:\SVNROOT
├─project1
│ ├─conf
│ ├─dav
│ ├─db
│ │ ├─revprops
│ │ ├─revs
│ │ └─transactions
│ ├─hooks
│ └─locks
└─project2
├─conf
├─dav
├─db
│ ├─revprops
│ ├─revs
│ └─transactions
├─hooks
└─locks
D:\SVNROOT下有两个目录project1和project2,都已经创建了版本库,所以我们修改每个conf目录下的svnserve.conf,使之指向同一个password-db和authz-db文件。
password-db = ..\..\passwd
authz-db = ..\..\authz这样,D:\SVNROOT\passwd和D:\SVNROOT\authz就控制了所有版本库的svnserve访问。另外在后面的操作中要关闭匿名访问,应该去掉“anon-access = none”前的“#”号,保证只有认证用户可以访问。
注意:还有一点需要注意,那就是svnserve的“realm”的值,在上面的设置下,应该保证所有的版本库使用相同的realm值,这样,对版本库的密码缓存可以在多个版本库之间共享,更多细节见客户端凭证缓存。
4,测试用户和组说明
版本库禁止任何匿名用户的访问,只对认证用户有效。
root:配置管理管理员,对版本库有完全的管理权限。
p1_admin1:project1的管理员,对project1有完全权限。
p1_d1:project1的开发者,对project1的trunk有完全的权限,但是对其中的/trunk/admin目录没有任何权限。
p1_t1:project1的测试者,对project1的trunk有完全的读权限,但是对其中的/trunk/admin目录没有任何权限。
p2_admin1:project2的管理员,对project2有完全权限。
p2_d1:project2的开发者,对project2的trunk有完全的权限,但是对其中的/trunk/admin目录没有任何权限。
p2_t1:project2的测试者,对project2的trunk有完全的读权限,但是对其中的/trunk/admin目录没有任何权限。
对应的组及组的用户:
p1_group_a:p1_admin1
p1_group_d:p1_d1
p1_group_t:p1_t1
p2_group_a:p2_admin1
p2_group_d:p2_d1
p2_group_t:p2_t1
5,修改D:\SVNROOT\passwd文件
前面已经说过了,用户和密码文件应该是在D:\SVNROOT\passwd,所以我们为每一位用户设置权限,文件内容如下:
[users]
p1_admin1 = p1_admin1
p1_d1 = p1_d1
p1_t1 = p1_t1
p2_admin1 = p2_admin1
p2_d1 = p2_d1
p2_t1 = p2_t1为了便于验证,所有密码和用户名一致,如果你使用的是其他认证方式,这一步可能不同,但是用户名应该都是一样的。
6,配置授权,修改D:\SVNROOT\authz
[groups]
# 定义组信息
p1_group_a = p1_admin1
p1_group_d = p1_d1
p1_group_t = p1_t1
p2_group_a = p2_admin1
p2_group_d = p2_d1
p2_group_t = p2_t1
[/]
# 指定所有的版本库默认只读,root可读写
* = r
root = rw
[project1:/]
# 指定对版本库project1根目录的权限
@p1_group_a = rw
@p1_group_d = rw
@p1_group_t = r
[project1:/trunk/admin]
# 指定对版本库project1的/trunk/admin根目录的权限,
# p1_group_a读写,p1_group_d和p1_group_t没有任何权限。
@p1_group_a = rw
@p1_group_d =
@p1_group_t =
[project2:/]
# 指定对版本库project2根目录的权限
@p2_group_a = rw
@p2_group_d = rw
@p2_group_t = r
[project2:/trunk/admin]
# 指定对版本库project1的/trunk/admin根目录的权限
@p2_group_a = rw
@p2_group_d =
@p2_group_t =
经过以上设置以后,你会发现一些有趣的事情。当使用用户“p1_d1”,检出project1的trunk时,目录是空的,好像admin目录根本不存在一样,当使用p1_d1用户浏览版本库时,能够看到admin目录,但是其中的内容却无法看到。
关于中文目录,也是没有问题的,只是注意要把authz文件转化为UTF-8格式,在我的WINXP的UltraEdit里显示的文件格式为U8-DOS,具体的做法是用UltraEdit打开authz文件,然后选择“文件->转换->ASCII转UTF-8”,然后保存。
再复杂的情况也不过如此,在实际的工作中要首先规划好权限,只赋给用户最小的权限,保证以最小的配置实现最复杂的权限控制。
分享到:
相关推荐
Apache配置SVN以及Subversion权限控制是为团队协作提供安全、高效的版本控制系统的关键步骤。在Windows 2008环境中,结合FTP服务器的配置,可以实现多用户对代码仓库的精细化访问权限管理。 首先,安装Apache和...
权限控制是Subversion管理系统中的重要组成部分,确保只有授权的用户能够访问、修改或查看仓库内容。本手册主要涉及Subversion仓库conf文件夹下的三个核心文件:`authz`、`passwd`和`svnserve.conf`,它们共同负责...
【Subversion 权限控制详解】 Subversion(简称 SVN)是一个强大的版本控制系统,广泛用于团队协作中的源代码管理和文档版本管理。在多人协作的环境中,权限控制至关重要,以确保每个团队成员只能访问他们被允许...
`authz` 文件是Subversion权限控制的核心,它允许你定义谁可以访问哪些资源以及他们可以执行的操作。文件结构主要包括 `[groups]`、路径段落(如 `[repository:/path]`)和权限规则。通过创建用户组,可以方便地批量...
这种模式下,所有历史版本的文件都由中央服务器统一管理,便于团队成员之间的协作和权限控制。 ### Subversion的操作流程 1. **检出(Checkout)**:从Subversion仓库中获取项目的最新版本到本地工作区。这一步骤...
SubVersion(通常缩写为SVN)是一种广泛使用的版本控制系统,用于管理软件开发中的源代码和其他文件的变更。它允许团队成员协作,并确保在多人同时修改同一份代码时,能够有效地合并更改,防止冲突。本篇文章将深入...
Subversion,通常缩写为SVN,是一种广泛使用的版本控制系统,尤其在开源社区中非常流行。它提供了对文件和目录的版本历史管理,允许多个人协同工作并追踪更改,同时保持代码库的一致性和完整性。Subversion的核心...
将Subversion与Apache结合使用,可以实现Web访问代码仓库并进行权限控制。以下是关于Subversion基于Apache使用时用户权限管理的详细知识: 1. **Subversion的使用方式** Subversion提供了两种主要的访问方式: - ...
6. **权限管理**:通过设置访问控制列表(ACLs),控制用户对仓库的读写权限。 7. **外部项目(Externals)**:在一个项目中引用其他项目的文件或目录,保持同步更新。 Subversion不仅适用于软件开发,也可用于文档...
### 重要知识点:采用Subversion进行版本控制 #### 一、Subversion概述 - **定义**:Subversion(简称SVN)是一种广泛使用的版本控制系统,主要用于管理随着时间变化的文件和目录集。它通过记录每一次对文件或目录...
Subversion支持基于角色的权限控制,管理员可以为仓库的不同部分分配不同的访问权限,确保数据的安全。 8. 远程访问: SVN可以通过HTTP、HTTPS、svn://等协议进行远程访问,这使得团队成员无论身处何地都能协同...
本文将详细讲解如何在Subversion中设置使用自带的svn协议进行权限控制。 首先,我们需要了解Subversion的权限配置文件,它们位于版本库的`conf`目录下。主要有两个核心文件: 1. `svnserve.conf`:这是Subversion...
Subversion(通常缩写为 SVN)是一种广泛使用的版本控制系统,旨在替代早期的 CVS。Subversion 提供了更高效能和增强的功能,解决了 CVS 的一些问题,使得团队协作和代码管理更为便捷。以下是 Subversion 的一些核心...
### 用 Apache 和 Subversion 搭建安全的版本控制环境 #### Subversion 简介 Subversion 是一种开源版本控制系统,它以其强大的特性和灵活性,在开源软件开发领域获得了广泛的认可。相比于早期流行的版本控制系统 ...
此外,Subversion还支持权限管理,确保只有授权用户可以访问和修改仓库内容。 总结来说,“Subversion版本控制系统系列培训 - 3”可能涵盖了以上所述的Subversion关键概念、工作流程和常用命令。通过深入学习和实践...
8. **权限管理**:讲解如何设置仓库的访问权限,控制不同用户对资源的读写权限,以确保代码的安全性。 9. **日志查看与回滚**:介绍如何查看文件或目录的历史变更记录,以及如何通过回滚操作恢复到之前的版本。 10...
在使用Subversion时,权限控制是管理团队协作和项目访问的关键部分。本文将深入探讨Subversion的配置,特别是关于权限文件`authz`的配置,以及解决其中的常见问题。 一、`authz`文件基础 `authz`文件是Subversion...