`

Subversion的权限控制(转载)

阅读更多

 

 

http://tech.it168.com/d/2007-12-26/200712261015001.shtml

 

在阅读本文之前,请确定你已经知道了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下的配置文件
    因为本文是以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”,然后保存。
    再复杂的情况也不过如此,在实际的工作中要首先规划好权限,只赋给用户最小的权限,保证以最小的配置实现最复杂的权限控制。

 

分享到:
评论

相关推荐

    Subversion权限控制手册

    权限控制是Subversion管理系统中的重要组成部分,确保只有授权的用户能够访问、修改或查看仓库内容。本手册主要涉及Subversion仓库conf文件夹下的三个核心文件:`authz`、`passwd`和`svnserve.conf`,它们共同负责...

    apache配置SVN,Subversion权限控制,win2008 FTP配置权限访问

    Apache配置SVN以及Subversion权限控制是为团队协作提供安全、高效的版本控制系统的关键步骤。在Windows 2008环境中,结合FTP服务器的配置,可以实现多用户对代码仓库的精细化访问权限管理。 首先,安装Apache和...

    SubVersion版本控制服务器端的目录级或库级别的访问权限配置

    SubVersion(通常缩写为SVN)是一种广泛使用的版本控制系统,用于管理软件开发中的源代码和其他文件的变更。它允许团队成员协作,并确保在多人同时修改同一份代码时,能够有效地合并更改,防止冲突。本篇文章将深入...

    Subversion 基于 Apache 使用时用户权限的管理.docx

    将Subversion与Apache结合使用,可以实现Web访问代码仓库并进行权限控制。以下是关于Subversion基于Apache使用时用户权限管理的详细知识: 1. **Subversion的使用方式** Subversion提供了两种主要的访问方式: - ...

    Subversion 版本控制流程概要

    Subversion,通常缩写为SVN,是一种广泛使用的版本控制系统,尤其在开源社区中非常流行。它提供了对文件和目录的版本历史管理,允许多个人协同工作并追踪更改,同时保持代码库的一致性和完整性。Subversion的核心...

    最齐全的subversion版本控制

    里面包含VisualSVN-1.7,TortoiseSVN-1.6.11.20210-win32-svn-1.6.13,LanguagePack_1.6.11.20210-win32-zh_CN,AnkhSvn-2.0.4757.115,SVNService,VisualSVN.Core。。欢迎大家下载。

    使用Subversion进行版本控制

    6. **权限管理**:通过设置访问控制列表(ACLs),控制用户对仓库的读写权限。 7. **外部项目(Externals)**:在一个项目中引用其他项目的文件或目录,保持同步更新。 Subversion不仅适用于软件开发,也可用于文档...

    采用Subversion 进行版本控制

    ### 重要知识点:采用Subversion进行版本控制 #### 一、Subversion概述 - **定义**:Subversion(简称SVN)是一种广泛使用的版本控制系统,主要用于管理随着时间变化的文件和目录集。它通过记录每一次对文件或目录...

    使用Subversion进行版本控制 PDF中文版

    《使用Subversion进行版本控制 PDF中文版》这一资源,深入介绍了Subversion(SVN)这一流行版本控制系统的基本概念、操作流程以及高级功能,对于想要深入了解或学习版本控制系统的开发者来说,无疑是一份宝贵的学习...

    subversion自带的协议svn的权限设置

    本文将详细讲解如何在Subversion中设置使用自带的svn协议进行权限控制。 首先,我们需要了解Subversion的权限配置文件,它们位于版本库的`conf`目录下。主要有两个核心文件: 1. `svnserve.conf`:这是Subversion...

    Subversion版本控制系统系列培训 - 4

    Subversion支持基于角色的权限控制,管理员可以为仓库的不同部分分配不同的访问权限,确保数据的安全。 8. 远程访问: SVN可以通过HTTP、HTTPS、svn://等协议进行远程访问,这使得团队成员无论身处何地都能协同...

    版本控制软件Subversion使用

    版本控制软件Subversion使用 **一、版本控制的重要性与优点** 在软件开发过程中,版本控制是不可或缺的一部分。它能够帮助团队有效地管理代码的变更历史,确保每个修改都被追踪,从而在遇到问题时能够快速回溯至...

    用 Subversion 构建版本控制环境

    Subversion(通常缩写为 SVN)是一种广泛使用的版本控制系统,旨在替代早期的 CVS。Subversion 提供了更高效能和增强的功能,解决了 CVS 的一些问题,使得团队协作和代码管理更为便捷。以下是 Subversion 的一些核心...

    用 Apache 和 Subversion 搭建安全的版本控制环境

    ### 用 Apache 和 Subversion 搭建安全的版本控制环境 #### Subversion 简介 Subversion 是一种开源版本控制系统,它以其强大的特性和灵活性,在开源软件开发领域获得了广泛的认可。相比于早期流行的版本控制系统 ...

    使用Subversion进行版本控制(针对 Subversion 1.4)

    使用Subversion进行版本控制针对 Subversion 1.4(根据r2866编译) 参照网页版 http://svndoc.iusesvn.com/svnbook/1.4/制作而成。 目录 前言 序言 读者 怎样阅读本书 本书约定 排版习惯 图标 本书的结构 本书是...

    Subversion版本控制系统系列培训 - 3

    此外,Subversion还支持权限管理,确保只有授权用户可以访问和修改仓库内容。 总结来说,“Subversion版本控制系统系列培训 - 3”可能涵盖了以上所述的Subversion关键概念、工作流程和常用命令。通过深入学习和实践...

    svn-精细权限控制手册

    【Subversion 权限控制详解】 Subversion(简称 SVN)是一个强大的版本控制系统,广泛用于团队协作中的源代码管理和文档版本管理。在多人协作的环境中,权限控制至关重要,以确保每个团队成员只能访问他们被允许...

    带有Subversion的版本控制Version Control with Subversion

    ### 版本控制与Subversion #### 一、版本控制的重要性 版本控制是软件开发过程中不可或缺的一部分,它能够帮助开发者追踪代码的历史变更记录,并且在必要时能够回滚到之前的某个版本状态。随着软件项目的复杂度增加...

Global site tag (gtag.js) - Google Analytics