UML软件工程组织
火龙果软件工程技术中心
更多技术资源 文章,讲座 ,培训,咨询 请访问 www.uml.org.cn
Subversion之路--实现精细的目录访问权限控制
2008-09-01 作者:郑新星 来源:网络
作者: 郑新星
联系: zhengxinxing <AT> gmail <DOT> com
状态: 正稿
版本: 1.0
修订: $Id: The.Road.to.Subversion_
authz
.rst 1749 2006-12-05 08:05:59Z zhengxinxing $
版权: 作者保留对本文的一切修改、发布等权力。任何人想要转载本文部分或全部内容时,必须保留包括作者、联系、状态、版本、修订、版权,共六项信息,并给出出处。对本文的参考引用,则不受限制。
关键词: Subversion 目录访问 权限
献辞:
仅以本文,献给中国广大的自由
软件
爱好者们
摘要:
本文从一个实际的例子入手,介绍了如何利用 Subversion 自带的目录
管理
功能
,来实现对
项目
目录的精细访问权限的控制。同时描述了在配置的过程中,需要注意的一些地方,如对
中文
的处理等。
.. section-numbering::
.. contents:: 目 录
:backlinks: top
前言
====
Subversion 权限简介
-------------------
在 Subversion 的使用当中,存在“
认证
”、“授权”两个概念。认证,即 authentication,是指
用户
名与
密码
的认证。授权,即 authorization ,是指某用户对某个目录是否具备读、写权限的一种审核。这两者配合作用,就组成了 Subversion 的整个帐户管理体系。
在实际的工作当中,我们有时候会遇见需要控制项目目录的访问权限的情况,比如说对项目的一些关键
模块
进行限制,仅允许少数授权人士才可以修改等。由于项目的目录本身就是作为
版本库
的一个部分被 Subversion 所收管,所以我们无法利用操作
系统
的帐户权限体系,来实现授权控制。因此,这个问题就只有让
svn
自己来
解决
了。
Subversion 提供了面向目录的帐户权限管理功能,通过它,我们就可以很精确地实现项目目录的访问控制。不过在 1.2 及其以前的版本,我们只能利用
mod
_authz_svn.so 模块,结合 Apache
服务器
来实现目录访问控制,这对于对 Apache 的配置与使用不是很熟悉的人来说,就不是很方便了。而Subversion终于在 1.3 版本上,在
svnserve
.
exe
服务
器里面添加了这一功能,方便了很多人。
其他信息
--------
本文面向那些 Subversion 的
管理员
,或者任何对 Subversoin 有兴趣的人们。本文假定读者对Subversion有一定的了解,因此不打算对所有涉及到的安装、使用,做一个细节性的描述。若对于文章中描述的其他细节方面有所疑问,请访问“参考文献”一节里面的参考资料。如果你对本文任何地方有什么意见,或者发现本文有着大大小小的错误,请联系 zhengxinxing <AT> gmail <DOT> com 。
本文是基于 Subversion 1.3.2、MS Windows 2003 Server Edition 平台来编写的,且 Subversion 服务器是利用 svnserve.exe 来架设的。不过,本文讲述到的绝大多数内容,都是不仅与
操作系统
平台无关,而且与是采用 svnserve(.exe) 还是使用 Apache 来作为 Subversion 服务器也基本无关。因此为免罗嗦,本文就以 svnserve(.exe) 为例进行描述,而略过 Apache 服务器相关的内容,有兴趣的读者可以参考其他文章来在 Apache 服务器下实现类似的功能。
本文是利用 reST 格式来编写的,如果你对它感兴趣,请访问
http://docutils.sourceforge.net/rst.html
。如果想要看到更好的html格式,你可以通篇复制本文到一个文本
文件
里,然后利用 docutils 的 rst2html.py
脚本
编译
它,当然,首先你必须安装 python。
本文的获得方式:
- 原始发布点:
http://iusesvn.com/bbs/thread-6-1-1.html
- 完整源文件,请利用 svn
命令
来获取,命令为 ``svn co svn://
cvs
.woodpecker.org.cn/woodpecker/zqlib/tangle/michael.zheng/road2svn``
- HTML版式文件,请访问
http://zhengxinxing.googlepages. ... bversion_authz.html
(推荐) 或
http://swjr.blog.com.cn/archives ... version1authz.shtml
致谢
====
非常感谢 iusesvn.com 站的站长 PCplayer ,他在本文编写过程中,给我提出了很多宝贵的意见与建议。
感谢 woodpecker.org.cn 提供的 Subversion 空间,让更多的人可以通过 svn 获得本文件。
感谢 google 公司提供的免费主页空间,让我可以放置完全定制的 HTML 文件。
实战
====
本章先直接给出需求及其最终的结果,如果你觉得对配置有什么疑问,或者看不懂,请不要着急,我会在后面的章节详细描述的。
背景假设
--------
厦门央瞬公司是一家电子元器件设备供应商,其中有个ARM部门,专门负责ARM芯片的方案设计、销售,并在北京、上海各设立了一个办事处。对于工作
日志
,原先采用
邮件
方式发给经理,但是这种方式有个缺点,那就是不具备连续性,要看以前的日志必须一封一封邮件去查看,很麻烦。于是就想到利用 Subversion, 让员工在自己电脑上编辑日志,然后利用svn传送回来,既方便员工自己编写日志,又方便对日志的归档处理,而且提交日志的时候只需要执行一下 svn
commit
即可,比发送邮件还要简单的多。
- svn服务器相关信息
- 服务器
地址
: 192.168.0.1
- 服务器OS: MS Windows 2000 Server Edition 中文版
- 用于存放日志的
代码
库本地目录: ``D:\svn\arm``
- arm部门
文档
的目录结构如下::
arm 部门名称
├─diary 工作日志目录
│ ├─headquarters 总部工作日志目录
│ ├─beijing 北京办日志目录
│ └─shanghai 上海办日志目录
├─ref 公司公共文件参考目录
└─temp 临时文件目录
- 人员情况
- morson,公司总经理,不习惯使用电脑,更喜欢传统的纸与笔,以及面对面的交流
- michael,arm事业部的部门经理,没事的时候喜欢弄点儿新技术,用svn来管理日志,就是他想出来的主意
- scofield,北京办人员,老员工,为人油滑难管
- lincon,上海办人员,老员工,大老实人一个
- linda,总部协调员、秘书,文笔不错,长得也不错
- rory,单片机技术员,技术支持
- 访问权限需求分析
- 允许总经理、部门经理读取所有文件。顺便给他们开放写权限,以便体现对他们职位的尊重,虽然对于某些文件来说,他们若拥有“写”权限其实也没什么用处
- 除部门经理外,所有其他人员,均只能看到本办事处人员工作日志
- 不允许匿名访问
- ref目录只允许经理和秘书读写,对其他人只读
- temp目录人人都可以随意读写
使用 svnserve.exe 作为 Subversion 服务器
----------------------------------------
本节描述如何利用 svnserve.exe 来作为代码库服务器端,实现上述功能。至于另外一种代码库服务器端,即利用 Apache 结合 mod_
dav
_svn.so 来实现的代码库服务器端,由于其对于本文叙述的内容“实现精细的目录访问权限控制”而言,与前者没有太大的区别,故而略过不提。它们二者只是在初次安装、配置方面存在一些不同,有兴趣的读者,可以参考其他文档,重新实验下述步骤。
启动 Subversion 服务
````````````````````
在服务器端,打开一个命令行窗口,用CD命令进入 Subversion 安装目录下的 bin 目录,运行如下指令::
svnserve -d -r d:\svn
其中的 -d 参数表示 svnserve.exe 将会作为一个服务程序运行在后台,而 -r 参数表示将 ``D:\svn`` 目录指定为代码库的根目录。这样,当
客户端
使用类似 svn://192.168.0.1/foo 这样内容的 URL 来访问服务器时候,其所访问到的真实代码库,其实就是 ``D:\svn\foo``
用上述命令行方式启动的 svn 服务有个小缺点,就是在本试验过程中,服务器端必须要一直开着那个运行了上述命令的DOS窗口,不能关闭它。如果不想看到这个窗口,可以将 svnserve 安装成
windows
的一个 services,安装方式请参考其他文章。
建立代码库
``````````
在服务器端的 ``D:\svn`` 目录下,建立一个名为 arm 的代码库,命令如下::
D:\svn>svn
admin
create arm
使用上述命令之后,如果不出问题的话,在 ``D:\svn`` 目录下就会多出一个叫做 ``arm`` 的目录,其下具备
conf
、dav、hooks、locks、db 等子目录或文件,此即 **一个名为arm的代码库** 。从此,通过 ``svn://192.168.0.1/arm`` 这样的 URL,我们就可以对这个代码库进行访问了。接下来就要进入本文的正题了,也就是权限配置部分了。
其实进入 ``arm\conf`` 目录你就会发现,它下面已经存在三个写了一些帮助信息和示例的配置文件,以帮助用户尽早掌握其配置方法。这三个默认的配置文件分别是 svnserve.conf、passwd、authz 。其中后两者没有后缀,对于 windows 系统的用户来说,看起来总是有些怪异,所以在接下来的章节里面,我将它们两个都给添加了个 conf 后缀,以便管理。
编辑代码库基础配置文件
``````````````````````
在服务器端,编辑代码库的 ``arm\conf\svnserve.conf`` 文件,如下::
[general]
password-db = passwd.conf
anon-access = none
auth-access = write
authz-db = authz.conf
管理用户帐号
````````````
在服务器端,新建 ``arm\conf\passwd.conf`` 文件,如下::
[users]
morson = ShowMeTheMoney
michael = mysecretpassword
scofield = hellolittilekiller
lincon = asyouknows111
rory = 8809117
linda = IlikeWorldCup2006
建立目录访问权限控制文件
````````````````````````
在服务器端,新建 ``arm\conf\authz.conf`` 文件,内容如下::
[groups]
g_vip = morson
g_manager = michael
g_beijing = scofield
g_shanghai = lincon
g_headquarters = rory, linda
g_docs = linda
[arm:/]
@g_manager = rw
* = r
[arm:/diary/headquarters]
@g_manager = rw
@g_headquarters = rw
@g_vip = r
* =
[arm:/diary/beijing]
@g_manager = rw
@g_beijing = rw
@g_vip = r
* =
[arm:/diary/shanghai]
@g_manager = rw
@g_shanghai = rw
@g_vip = r
* =
[arm:/ref]
@g_manager = rw
@g_docs = rw
* = r
[arm:/temp]
* = rw
导入代码
````````
在客户机 ``F:\temp`` 目录下,建立好前述“背景假设”一节中描述的目录结构,然后用命令 ``F:\temp>svn
import
arm svn://192.168.0.1/arm --username michael --password mysecretpassword`` 导入整个目录结构。
这条指令的精确意思是,将 arm 目录下面的所有东西,导入到那个名叫 arm 的代码库中去。如果你不指定源目录,则 svn 会默认将当前目录作为源目录。比如说,你处于 ``F:\temp`` 目录下的时候,直接执行 ``svn import svn://192.168.0.1/arm`` ,那么当你取出你的代码的时候,你会发现,居然多了一层名为 arm 的目录。结果,你就必须使用类似 ``svn://192.168.0.1/arm/arm`` 这样怪异的URL,才能够正确访问到你的代码们。
这一点粗看好像不是特别重要,不过联想到前述的目录授权规则,可都是按照标准的项目目录结构来设计的。突然之间,你项目的根目录之上,多出了一个名为 arm 的目录,那么我们的所有目录授权规则,基本上都要全部改过了,否则除了根目录,你永远会得到一个莫名其妙的“access denied”。由于 Subversion 在这一步骤上的界面不够人性化,因此这是初学者很容易弄混的地方之一。
测试
````
在服务器上,打开一个 DOS Prompt 窗口,输入如下指令::
svn co svn://127.0.0.1/arm --no-auth-cache --username rory --password 8809117
我们应该得到如下目录结构::
arm
├─diary
│ └─headquarters
├─ref
└─temp
然后修改ref目录下任意文件并提交,服务器将会报错“Access denied”,Bingo!
组织简介
|
联系我们
|
Copyright 2002 ®
UML软件工程组织
京ICP备10020922号
京公海网安备110108001071号