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。
2) 如果当前目录的CVSROOT的用户不是CVSAdmin,则将其改为CVSAdmin。
3) 在WinCVS中选择管理命令行,如下图所示
在弹出的对话框中输入:
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中设定。