使用CVSACL进行CVS权限访问控制(for Linux)
 

2009-01-09 作者:yueyx 来源:hexun.com

 

CVS是一个很成熟的版本控制系统,它是开源世界的杰作,并且已经成为开源组织使用的标准版本控制系统,在几乎所有的开源项目中得到应用。

也正是由于CVS产生和应用于开源世界,使得它在代码的访问控制方面存在先天性的不足,在应用于大中型的商业项目的代码管理中收到一定的限制。因为这类型的项目通常都需要比较细致的分工,不同的小组分别负责不同模块的开发,代码需要比较严格的访问控制,不同的开发人员只能访问授权的代码。

幸运的是,CVS是一个开源的软件,我们有什么需要的话可以通过修改它的源代码来实现。CVSACL就是实现访问控制的CVS补丁。它本身也是一个开源的项目,项目主页是http://cvsacl.sourceforge.net/index.html 。它提供了对CVS的模块,目录和文件以及分支和tag的高级访问控制。CVSACL定义了8级不同的访问权限,分别是:

权限

关键字

说明

没有权限

n

用户不能做任何cvs操作

读权限

r

可以执行annotate, checkout, diff, export, log, rannotate, rdiff, rlog, status命令

写权限

w

可以执行commit/checkin命令

tag

t

可以执行tag/rtag命令,依赖读权限

创建

c

可以执行add import 命令

删除

d

可以执行rm命令

全部权限

a

可以执行所有cvs命令处理cvsacl管理命令

管理权限

p

可以执行所有命令

1. 下载CVSACL:

通过如下网址可以下载到CVSACL相关程序,目前最新版本是cvsacl-1.2.5:

https://sourceforge.net/project/showfiles.php?group_id=75057&package_id=77484&release_id=423655

cvsacl-1.2.5-for-cvs-1.11.22.tar.gz

cvs-1.11.22-cvsacl-1.2.5-patched.tar.gz

2. 安装CVSACL:

安装方法:cvs-1.11.22-cvsacl-1.2.5-patched.tar.gz

[root@localhost setup_cvs]# tar -zxvf cvs-1.11.22-cvsacl-1.2.5-patched.tar.gz

//解压缩cvs-1.11.22-cvsacl-1.2.5-patched.tar.gz

[root@localhost setup_cvs]# mv cvs-1.11.22-cvsacl-1.2.5-patched cvs-1.11.22

//修改cvs-1.11.22-cvsacl-1.2.5-patched目录名称为 cvs-1.11.22

[root@localhost setup_cvs]# cd cvs-1.11.22 //进入cvs-1.11.22

[root@localhost cvs-1.11.22]# ./configure //编译安装

[root@localhost cvs-1.11.22]# make

[root@localhost cvs-1.11.22]# make install

[root@localhost setup_cvs]# cvs –version //查看cvs版本

Concurrent Versions System (CVS) 1.11.22 (client/server)

with CVSACL Patch 1.2.5 (cvsacl.sourceforge.net)

注:不需要特意删除旧版本的CVS。

3. CVS服务器的配置:

(1) 修改配置文件:

[root@localhost /]# vi /etc/services

查看是否有:

cvspserver 2401/tcp #CVS client/server operations
cvspserver 2401/udp #CVS client/server operations

注:系统自带了CVS时,这2行也已经有了,只需要确认一下。如果没有,请自己加上去。

(2) 创建CVS启动脚本:

[root@localhost /]# vi /etc/xinetd.d/cvspserver

内容如下:

service cvspserver
{
disable = no
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/bin/cvs
server_args = -f --allow-root=/cvstest pserver
log_on_success += USERID
log_on_failure += USERID
}

注:其中,server指定CVS可执行文件路径,默认安装就是/usr/bin/cvs,server_args指定源代码库路径及认证方式等,例子中把源代码存放在cvsroot的主目录中,也可以另外指定路径,但必须注意权限设置,pserver是密码认证方式,这种方式的安全性要差一些,但操作起来比较简单。请注意每行等号左右都有一个空格,否则无法启动服务。

(3) 重新启动xinetd服务:

[root@localhost /]# service xinetd restart

查看是否启动:[root@localhost /]# netstat -l | grep cvspserver

屏幕显示:tcp 0 0 *:cvspserver *:* LISTEN

说明已经正常启动,如果没有请做如下检查:

<1>请检查vi /etc/xinetd.d/cvspserver文件中的server = /usr/bin/cvs路径和实际执行文件所在位置是否一致;(一般这步骤即可解决该问题)

<2>请重新检查配置过程是否有错误或者遗漏;

<3>最后还必须检查防火墙的设置,把2401端口打开。

4. CVSACL权限设置:

(1) 创建用于CVS的专用系统组和用户:

[root@localhost /]# groupadd cvsroot

[root@localhost /]# useradd –g cvsroot cvsadmin

(2) 初始化cvs服务器环境:

[root@localhost /]# cvs -d /cvstest init

(3) 设置CVS配置库归属及权限:

[root@localhost /]# chown –R cvsadmin.cvsroot /cvstest

[root@localhost /]# chmod –R 770 /cvsroot

(4) 修改CVSROOT/CVSROOT/aclconfig配置文件:

[root@localhost /]# vi /cvstest/CVSROOT/aclconfig

UseSystemGroups=yes 行首添加“#”,表示注释掉。

UseCVSGroup=yes 去除行首的“#”,表示启用此句。

(5) 创建CVS用户及组:

[root@localhost /]# cd /cvstest/CVSROOT

[root@localhost /]# htpasswd –c passwd yueyx

[root@localhost /]# vi passwd

yueyx:*******:cvsadmin

将passwd文件中的所有cvs用户映射到同一个系统用户cvsadmin上。

[root@localhost /]# vi group

文件格式:

group1:x:1:yueyx,test1

用户之间用 “,”分割。

注:cvsacl有个bug,必须在组用户最前边添加一个不存在的cvs用户,group文件才会生效。原因不明,但此方法确实管用。

(6) 使用cvsacl细化权限:

[root@localhost /]# cvs -d /cvstest racl yueyx:wcd –R Project/doc

说明:/cvstest:配置库路径 yueyx:用户 wcd:参见本文“CVSACL定义了8级不同的访问权限”表格。 Project :配置库中的Module(模块),doc:Module(模块)下的目录

格式:cvs –d 配置库位置 racl [用户||组:权限] [-Rl] [-r tag] [模块…] [文件…]

- R 进行目录递归

- r rev 设定版本/标签

- l列出已定义的ACLs权限


火龙果软件/UML软件工程组织致力于提高您的软件工程实践能力,我们不断地吸取业界的宝贵经验,向您提供经过数百家企业验证的有效的工程技术实践经验,同时关注最新的理论进展,帮助您“领跑您所在行业的软件世界”。
资源网站: UML软件工程组织