在项目组人数很少的时候,svn采取全开放策略,对项目安全没有什么影响。但是当人员越来越多,越来越复杂的时候,如何对项目源代码进行管理,如何控制项目的安全,尤其是如何对领导认为的核心技术进行保护,很快就提上了项目管理者的议程。
那么对于SVN来说,如何控制每个用户的权限,如何简化权限设置,这是本文想要研讨的话题。
在继续下面的话题之前,首先要谢谢“星辰的天空”写的文稿给予的帮助,里面写的东西已经很不错了,虽然整体感觉有点乱,但是也让我受益匪浅,对SVN权限管理有了比较深入的认识。这个是链接:http://www.cnblogs.com/xingchen/archive/2010/07/22/1782684.html 。
为了记录自己配置SVN权限的过程,以及在配置过程中发生的一些问题,当然也为了我博客的人气考量,特写下这篇博文。
每个SVN数据仓库下都包括三个配置文件:
- svnserve.conf 服务器进程的配置文件
- authz 用户验证配置文件
- passwd 用户密码配置文件
SVNSERVE.CONF配置文件说明
这个文件是服务器主进程svnserve的配置文件,在SVN中修改配置后不用重启服务。
##匿名用户访问规则
anon-access = none / read / write
##验证用户访问规则
auth-access = none / read / write
##指定验证用户配置文件,权限管理主要操作文件,可以指定文件路径
authz-db = authz
##指定密码配置文件,可以指定文件路径
password-db = passwd
authz配置文件说明
这个是SVN权限管理的配置文件,很重要,配置要慎重。在开始具体阐述如何配置各级权限前,我们需要明确一个重要的定义,那就是SVN只针对目录进行权限控制,无法控制到具体某个文件。
#数据仓库/代码库的名称及根目录
[edu:/]
#用户及用户的权限,若在用户后面跟空白,就表示该用户在当前项目中无权限
#若使用“*”,表示所有用户具有的基本权限,对于具体某个人来说,还要看他有没有定义自己的权限
hansy = rw #读写权限
hansy = #当前项目/分支无权限
* = r #当前项目对所有人都开放读权限
如果需要对代码库下级目录指定具体权限,那么可以这样操作:
[edu:/cloud/brief]
hansy = r
caro =
看起来是不是很简单呢,在了解SVN权限配置之前,我曾经以为有多复杂,多麻烦……
可能有人会提出,如果我人很多,人员流动也大,如果我每次都需要这样去配置,那不累死,我们可没有专门的系统管理人员/配置人员哦。事实上,SVN还提供“组”的权限配置,就像我们在所有系统里面都会有的角色这样的概念。
SVN的组配置如下:
#组的配置,为了方便区分,一般组名前面加"g_"
[groups]
# 任何想要查看文档的非本部门人士,如领导
g_vip = morson
# 项目经理
g_manager = michael
# 测试人员
g_test = scofield
# 开发人员
g_dev = lincon
# 一般员工
g_member = rory, linda, sarah
# 小秘,撰写文档
g_docs = sarah
我们开始对组进行权限控制:
[edu:/] #代码库根目录权限控制
@g_manager = rw #项目经理或管理者具有读写权限
@g_member = #一般员工没有权限
@g_vip = r #领导有读的权限
* = #非小组成员没有权限
#代码库源代码子目录
[edu:/src]
@g_dev = rw
@g_manager = r
@g_member =
@g_vip = r
* = #非小组成员没有权限
#代码库文档目录
[edu:/doc]
@g_manager = rw #项目经理或管理者具有读写权限
@g_member = r #一般员工有读的权限
@g_vip = r #领导有读的权限
@g_dev = r #开发人员有读权限
@g_docs = rw #文档管理员有读、写权限
* = #非小组成员没有权限
在每个目录的权限配置中,我们都特别标注了“* = ”,这主要是因为SVN中的一个规则,那就是”子目录“默认继承“父目录”的所有权限,而这个可能会导致在“父目录”中有访问权限的用户进入他不能访问的“子目录”。
passwd密码配置文件说明
这个文件是用户密码配置文件。在SVN中,可以通过编辑该文件对用户进行密码管理,也可以通过SVN命令来对密码进行管理。
下面是密码配置文件格式:
hansy = 87827192
sarah = 87827239
在此需要注意的是,密码可以是明文,也可以是加密的,但是密码不能是中文。这个和配置方式有关系。
我们可以用SVN命令进行用户密码配置。
#使用htpasswd进行添加用户、密码以及MD5加密
#参数c表示创建一个新文件,如果有这个文件也会被新文件覆盖,注意哦,否则你就哭吧
#参数m表示对密码进行MD5加密
htpasswd -cm /opt/svn/edu/conf/authz
用htpasswd不能建立用户权限配置文件,所以你还需要到authz文件中进行权限配置才能正常使用。