posts - 495,comments - 227,trackbacks - 0

CVS用户管理是 比较复杂的部分,也是十分重要的部分。通过CVS用户管理可以创建CVS用户,并给每个用户赋予访问各个目录的权限。对于使用Pserver登陆的方式, 需要对资源库的CVSROOT目录以及在这个目录树里的所有目录做严格的权限限制,这是因为 $CVSROOT/CVSROOT 目录包含 passwd 和其它与安全审核相关的文件,任何对这些目录具有写访问的用户将有能力成为系统上的任何用户。

1 准备知识

CVSNT 的用户验证方式分两种:Windows系统用户与CVSNT用户共存的混合验证方式,及CVSNT用户单一验证方式,默认工作在混合验证方式下。选用混合 验证方式,创建CVSNT用户的过程就是创建Windows用户的过程,因此当CVS用户较多的时候,不容易管理,因此推荐使用单一验证方式。

各个资源库所使用的验证方式及用户配置由其目录下CVSROOT里的配置文件决定,其中有几个比较重要的文件:

l config文件

控制CVSNT的验证工作方式的就是config文件,注意该文件最前面的两行:

#Set this to ‘no’ if pserver shouldn't check system users/passwords

#SystemAuth=yes

第二行就是我们要修改的内容,默认状态是被注释掉的,SystemAuth有两个值yes和no:

yes:pserver将使用Windows系统用户和CVSNT用户来共同验证(若CVSNT用户未定义,则用Windows系统用户来进行验证),默认为yes,CVSNT用户在后面将要介绍的passwd文件中定义。

no:只使用CVSNT用户来进行验证。

该文件可以在客户端进行修改,因此我们可以检出CVSROOT后,将第二行改为SystemAuth=no,并commit到CVSNT上就可以启用单一验证方式了,注意启用单一验证方式后原来的Windows系统用户将无法登陆CVS。

l admin文件

该文件保存CVSNT管理员用户列表,内容很简单,形式如下:

User1

User2

User3

每 一行定义一个管理员用户,默认时没有该文件,但你可以在客户端自己添加并add上去,再commit到CVSNT上,但是光有这个文件还是不会生效的,还 要将其添加到checklist文件中,使CVSNT能够读取该文件的内容,在checklist中添加文件列表的格式为:

[空格]文件名 出错信息

其中文件名前的空格必须要有的,不然会出错。

我们可以先添加admin文件到CVSNT中,再修改checklist文件commit,就可以使admin文件生效了。

l passwd文件

服 务器工作在CVSNT用户单一验证方式下的时候,这个文件定义了CVSNT的用户信息,这里面保存着用户名,用户密码,以及别名信息。默认状态下没有该文 件,但是我们可以在CVSNT还工作在混合验证方式下时,用系统管理员登录,通过添加用户命令来让CVSNT自动建立一个passwd文件。

添加用户的命令的示例:

cvs passwd –r administrator –a cvsadmin

之后系统提示输入密码,输入后服务器会新建一个passwd文件。

该文件的内容很简单,形式如下:

cvsadmin:6kj2yopEuCacs:administrator

wangp:Lm9pr9a1FAl0U

chu:UnEKuKtsgm242

以第一行为例:cvsadmin为用户名,fqr1fS4gDghrt为CVS使用UNIX标准加密函数对密码进行加密后的结果,administrator为该用户的别名,当使用混合验证方式时对应Windows系统用户名。

注意:这个文件是不能在客户端进行修改的,不能checkout出来。

l group文件

这个文件是定义系统的组,我们可以将同样性质的用户归入一个组,然后用给用户赋权限的方式给组赋权限,这样,一个组的用户就会具有同样的权限。Group的内容如下:

group1:user1 user2 user3

group2:me you he

group3:tom jerry

有上面可以看出来,这个文件的内容也是相当的简单,首先是组的名称然后是冒号,接着是用户名,多个用户名之间用空格来进行分割。

Group文件可以在客户端进行新建和修改,不用修改checkoutlist这个文件,系统会自动build这个文件并且使之生效。

2创建用户
2.1 设置环境变量

在命令行创建用户之前,必须设置两个环境变量:

CVSROOT:指向服务器仓库的目录;

Path:指向CVSNT的安装目录。

2.2 利用系统管理员创建CVS用户

首先要注意的是,在系统命令行中只有系统管理员可以创建用户,CVS管理员不能创建用户或者修改用户密码。

1) 用Administrator用户取出CVSROOT目录;

>cvs co CVSROOT

2) 在CMD中进入取出的CVSROOT目录;

3) 用cvs passwd –r administrator –a CVSAdmin命令建用户并输入用户口令,这里使用administrator用户为别名,可以使用其它系统中的用户名建用户,但由于这些用户可能不会 被CVSNT使用,因为这些用户没有权限在默认的临时文件夹中写临时文件,所以客户端不能正常工作。如果增加这个用户的权限,却带来安全的隐患,因此建议 用administrator用户作别名;

4) 创建windows系统用户cvsuser,权限为user。

5) 多次使用cvs passwd –r cvsuser–a username命令创建cvs普通用户,为每个使用cvs的用户分配用户名和密码;

6) 在取出的CVSROOT目录中建一个文本文件:admin,在这个文件中填上Repository的管理员用户,如:CVSAdmin,并将该文件上传到服务器上;

7) 在取出的CVSROOT目录中修改checkoutlist文件,加入一行admin (注意前后均要有空格,否则可能会出错),上传到服务器上,以便CVS服务器能自动通过新建的文件知道管理员账号;

8) 在取出的CVSROOT目录中修改config文件的SystemAuth=no,并去掉前面的注释符号#,在提交之前要确认一下你上面的修改是否正确,如果提交了这个文件,CVSNT验证模式就开始生效了,此时,使用Windows系统用户将无法登录到CVS。

2.3 利用CVS管理员创建CVS用户

如果安装了WinCVS软件,即使修改了config文件,也可利用前面创建的管理员账号CVSAdmin创建CVS用户。

1) 在WinCVS中使用CVS管理员登录,选中某个目录后,选择更改CVSROOT。

clip_image002

2) 如果当前目录的CVSROOT的用户不是CVSAdmin,则将其改为CVSAdmin。

clip_image004

3) 在WinCVS中选择管理命令行,如下图所示

clip_image006

在弹出的对话框中输入:

cvs passwd–a wang

同样会提示您设置密码,创建成功后,会在cvs log栏输出:

cvs passwd -a wang

Adding user wang@132.134.0.88

***** CVS exited normally with code 0 *****

同理可创建其他用户。也可直接在log输出界面输入CVS命令

4) 查看CVS服务器资源库中的CVSROOT中的passwd文件,可发现,wang已经加入到passwd文件中,证明创建用户成功。

3 配置单个用户权限

只有管理员或者被赋予control权限的用户才有权力对用户进行权限配置。下面介绍利用上述创建的CVS管理员账户CVSAdmin对CVS用户进行权限配置的具体过程。

1) 先在WinCVS中以CVSAdmin用户登录,并将该文件夹的CVSROOT改为使用CVSAdmin登录

2) 由于WinCVS的命令行不支持cvs chacl命令,但是可以直接在WinCVS输出中输入chacl命令。当然接下来的操作也可以在系统命令行中完成,在命令行中设定权限需要先进入该文件夹目录下,在命令行和在WinCVS中的命令格式不尽相同。

3) 首先介绍在命令行中的格式:

(a) 输入“cvs chown CVSAdmin”,宣布该文件夹的拥有者为CVS管理员,这条命令执行后,在该文件夹中的下一层目录—“CVS”中的“fileattr.xml”已经写入了这个目录的属有者。

(b) 用“cvs chacl –a noread,nocreate,nowrite,nocontrol”命令给文件夹设定默认访问权限。

(c) 用“cvs chacl”命令设定文件夹的访问权限,“cvs chacl”命令的详细描述如下:

cvs chacl [-R] [-r branch] [-u user] [-j branch] [-n] [-p priority] [-m message] [-a [no]{read|write|create|tag|control|all|none}[,...]] [-d] [file or directory...]

cvs rchacl [-R] [-r branch] [-u user] [-j branch] [-n] [-p priority] [-m message] [-a [no]{read|write|create|tag|control|all|none}[,...]] [-d] [file or directory...]

如: cvs chacl -R -a read,write -u user1

现在分别对这几个参数做一下说明:

read 读权限

write 写权限

create 创建目录的权限

tag 创建tag权限

control 控制权限

all 所有权限

none 没有任何权限

默认情况下,任何用户都拥有任何目录的所有权限。

任何情况下只有目录的拥有者和或拥有control权限的用户才有权力更改目录的使用权限。

需要说明的是,read|write|create|tag|control 之间没有权力大小之分。如果有write权限的话,未必有read权限。如你只给某一个用户写的权限的话,他是无法读出的。对于有写权限的人,一般会给他读的权限。

对于create 只有创建目录的权限,如果目录下面有文件,你必须还要有write权限才行。

对于control 如果某用户对某目录有control权限,那么这个用户可以使用“cvs chacl”命令更改这个目录的权限。

对于all 如果某个用户对某个目录有all权限,那么这个用户将拥有所有权限。

对于tag 不需要有wirte权限也可以tag,但应该给其read权限。

需要说明的是:CVS不仅可以对目录做权限控制,还能对文件做权限控制。

4) 在WinCVS中的命令格式如下:

(a) 同命令行设置方法一样,输入“cvs chown CVSAdmin”,宣布该文件夹的拥有者为CVS管理员

(b) 用“cvs chacl”命令设定文件夹的访问权限,“cvs chacl”命令的详细描述如下:

cvs chacl -R [-r tag] {user|default}:[{[r][w][c]|[n]}] [directory...]

-R 递归到子目录

-r 对特殊分支设定权限

其中权限设置比命令行中可设定的权限少,包括:

r            (读取权限)

w           (写入权限)

c            (创建和删除权限)

n            (没有任何权限)

注:这种方法在WinCVS中未测试成功,报错信息为:

cvs [chacl aborted]: server does not support chacl

通过上述几个步骤设定好各个用户的访问权限后,可用“cvs lsacl”显示该文件夹的所有用户访问权限。或者也可以通过查看服务器端该文件夹目录下的“CVS”文件夹中的“fileattr.xml”查看。

4 配置群组用户权限

上一小节中所阐述的方法只能一个一个的为单个用户设定权限,当项目参与人员过多时,使用这种方法难免显得繁琐。这种情况可以使用group,位参与人员划分群组,为每个群组分配相应的用户权限。其步骤如下:

1) 在cvsclient端的CVSROOT目录下,创建group文件,注意该文件没有扩展名,group文件的格式如下:

group1:user1 user2

group2:user3 user4

group3:user5 user6

例如一个group文件内容如下:

manager:zhang

leader:chu

developer:wu wang huang zhou wangp

2) 将该group文件commit到CVS服务器端

3) 先在WinCVS中以CVSAdmin用户登录,并将该文件夹的CVSROOT改为使用CVSAdmin登录

4) 在系统命令行中输入

cvs chacl [-R] [-r branch] [-u user] [-j branch] [-n] [-p priority] [-m message] [-a [no]{read|write|create|tag|control|all|none}[,...]] [-d] [file or directory...]

其中[-u user]的user,用group名称代替,如:

cvs chacl –R –a write,read,create –u developer

这样developer组中的所有用户都将拥有读、写、创建的权限了。

5 备注/注意事项

本节介绍的CVS用户管理的方法大多需要结合WinCVS使用,因此在不用WinCVS的情况下需要注意以下几点。

1) 安装了CVSNT后,需要设定CVSROOT变量,指向CVSNT的资源库存储路径

2) CVSNT默认采用混合式验证,所以在命令行可直接进行CVS操作,默认使用系统管理员作为CVS管理员。此时可直接创建用户,但是此时创建的用户需要和 系统用户相关联,因此有必要创建一个cvsuser的系统user用户。如果不关联创建的用户将无法登录,使用CVS相关操作。

3) CVS管理员无法创建用户,只有系统管理员才能创建用户。因此只有在建立完了所有的用户后,才可将config中的SystemAuth改为no,改为 no以后只有CVS用户才能登录CVS,系统管理员将无法登录CVS,也就无法创建CVS用户。如果碰到此类情况,只有将SystemAuth重新改为 yes。但如果安装了WinCVS,可结合WinCVS进行用户创建。

4) 最后备注一点,在使用WinCVS进行CVS用户管理的过程中,有非常重要的一步,就是将当前文件的CVSROOT改为CVS管理员,不知道这步在系统命 令行中怎么设定。如果可以在命令行中将当前目录的CVSROOT设定,那即可在命令行中创建cvs用户。当前解决方法是在WinCVS中设定。

posted on 2012-02-22 18:42 SIMONE 阅读(5308) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: