CVSNT 配置
CVS是一个C/S系统,多个开发人员通过一个中心版本控制系统来记录文件版本,从而达到保证文件同步的目的。
先说下CVSNT的用户验证方式,CVSNT的用户验证方式分两种:Windows系统用户与CVSNT用户共存的混合验证方式,及CVSNT用户 单一验证方式,默认工作在混合验证方式下,当然使用单一验证方式对用户的管理肯定比较方便一点,因此下面的配置就是围绕该方式进行的。各个资源库所使用的 验证方式及用户配置由其目录下CVSROOT里的配置文件决定,其中有几个比较重要的文件: config、checkoutlist、admin、group、passwd等。其中,config,checkoutlist企CVSROOT原本有,admin, group文件要自己添加。
本人所用CVSNT版本為:2.5.03(Scorpio)Build 2382
了解了以上内容,下面我说一下我自己的配置步骤,我没有使用WinCVS进行操作,是直接使用命令行进行修改的,觉得这样思路比较清晰:
1、创建仓库:D:/cvs_server/cvstest,仓库名为:/cvs_server
2、进入命令提示符,因为此时为混合验证模式,直接用系统的administrator用户登陆。
命令:
set cvsroot=:pserver:administrator@localhost:/cvstest
cvs login
//输入密码
3、添加CVSNT系统管理员用户,此时会提示设置用户密码:
cvs passwd –r administrator –a cvsadmin
Adding user cvsadmin@localhost
New Password:(此输入密码)
Verify Password:(再次输入密码)
4、由于对于权限的配置都放在CVSROOT下,所以首先要检出服务器上的CVSROOT目录:
(此时还是以administrator用户操作,建议在本地盘上创建一个文件夹,用来存从CVS服务器上checkout文件,本人创建名为:D:/cvs_local)
cd cvs_local
cvs checkout CVSROOT
5、添加admin文件,首先将CVSROOT检出,在CVSROOT下新建admin(無後綴)文件,每
一行一个用户名,内容为:
cvsadmin
执行命令:
cd CVSROOT
cvs add admin
cvs ci
6、修改checkoutlist文件,在该文件末尾添加一行,内容为:
[空格]admin
注意:admin前的空格不能少。
执行命令:
cvs ci
7、修改CVSROOT访问权限:
cd CVSROOT
cvs chown cvsadmin //更改所有者为cvsadmin
cvs chacl –a none //設置目錄的存取权限为none
cvs chacl –u cvsadmin –a read,write,control //添加cvsadmin ,或 cvs chacl –u cvsadmin –a all
cvs commit
8、添加writers文件,控制仓库的write权限。在writers文件中加入要赋予write权限的用户。
writers文件内容如下:
[空格]cvsadmin
[空格]XXXX
注意:前面的空格不能少。
执行命令:
cvs checkout CVSROOT
cd CVSROOT
cvs add writers
cvs ci
(注:如果用户a没有存在于writers文件中,则对cvs模块均没有写权限)
9、修改config文件,按上面的方法首先要從倉庫上check out出來,然後修改文件,修改后再
commit:
config文件是控制CVSNT的验证工作方式,注意该文件最前面的两行:
#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用户来进行验证。
该文件可以在客户端进行修改,因此我们可以将其checkout出来将第二行改为SystemAuth=no,并commit到CVSNT上就可以启用单一验证方式了,注意启用单一验证方式后原来的Windows系统用户将变为无效,因此要注意执行该步骤的时机。
命令:
cvs checkout CVSROOT
cd CVSROOT
// 此时修改config文件
cvs ci
10、此时单一验证方式已经启用了,也就是只能使用刚才添加的cvsadmin进行登录,此时可以
把CVSNT控制面板上的Use local users for pserver authentication instead of domain users关掉。(登录前还要改一下系统变量CVSROOT,关闭命令提示符窗口,修改CVSROOT为:
:pserver:cvsadmin@localhost:4021/CVSNT/Repository ->此处可以不设置) (注:Repository
改为自己创建的仓库)
11、如果为了避免出现错误,先重启一下CVSNT服务器,因为已经启用单一验证方式,先要
进行登录。
命令:
Set cvsroot=:pserver:cvsadmin@localhost:/cvstest
cvs login
//提示输入密码
12、经过以上步骤,可以说用户配置已经基本完成了,CVSNT可以很好的工作在单一验证方式
下。进一步的管理可使用以下命令:
添加用户:
cvs –d D:/cvsproject/csbs passwd -a username //可能会提示添加别名的提示,可不用理会
或用:
set cvsroot=:pserver:localhost:/cvstest
cvs passwd –a username
提示输入密码:…
提示再次输入密码:….
要修改用户权限前前建议先查看一下当前的用户权限,然后再修改权限:
命令:
cvs lsacl //可查询当前的用户权限。
修改项目所对应用户的权限:
命令如下:
cvs chacl –u username –a r|w|c|n projectname(r:Read w:write c:control n:none)
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 没有任何权限
需要说明的是,read|write|create|tag|control 之间没有权力大小之分。
对于create 只有创建目录的权限,如果目录下面有文件,你必须还要有write权限才行。
对于control 如果某用户对某目录有control权限,那么这个用户可以使用cvs chacl命令更改这个目录的权限。
对于all 如果某个用户对某个目录有all权限,那么这个用户将拥有所有权限。
对于tag 不需要有wirte权限也可以tag,但应该给其read权限。
cvs chacl -u g2 -a read,nowrite HelloWorld.java
上述命令赋予g2群组当前目录下HelloWorld.java文档的读权限,拒绝其写权限。
cvs chacl -R -u cvsuser2 -d .
上述命令取消cvsuser2 用户对当前目录对应的服务器目录的所有权限。
需要说明的是:CVS不仅可以对目录做权限控制,还能对文件做权限控制。
注意:这里是一个CVSNT 2.5.03 build 2382 bug
当进入被cvs checkout出来的项目客户端文件夹时,并且这时你并不是使用checkout所使用的帐户登录的,cvs会自动使你变更成为checkout时所使用的帐户。
危害描述:
可以借此漏洞夺得他人帐号控制权,甚至最高管理员权限。
解决方法:
在使用时请勿在他人的计算机上使用自己的帐号checkout项目,尤其是管理员帐号。
总结:每次执行一个用户的权限更新都会累加或者覆盖(操作同一用户的时候)其以前的所有的权限的配置。
13、如果要对包含子目录也要同样的操作刚要加参数-R(-r不行)
命令:
cvs chacl -R -a none
14、删除用户username
[命令]
cvs passwd -X username(X为大写)
15、添加组管理(group),只需同添加admin步骤一样,按照格式要求新建group文件即可。
group文件定义CVSNT中组信息,同组里的用户拥有一样的权限,对组权限的修改和对用户权限的修改一样。[此文件也不在CVSNT里,要自己添加]
group文件的内容为:
csbsWeb:user1 user2 user3
csbsCRM:user4 user5 user6
csbsOPTS:user7,user8,user9
注:user1, user2 and user3 企同一個組,該組為 “csbsWeb”,而user4, user5 ,user6企“csbsCRM”組中.
可以看到该文件的内容也很简单,格式:组名:用户名1,用戶名2…
多个用户名之间用空格隔开。
Group文件可以在客户端修改,不用修改checkoutlist这个文件,系统会自动使其生效。
作为组里面的特定成员可以赋给特定的权限。
例子:對於項目csbsOPTS權限控制。
命令:
cvs checkout csbsOPTS // checkout 項目csbsOPTS
cvs lsacl csbsOPTS // 查看項目的所受權限控制
cvs chacl –a none csbsOPTS // 設置default為none。
cvs chacl –R –u csbsOPTS –a all csbsOPTS // 設置項目csbsOPTS為用戶組csbsOPTS所控制
cd csbsOPTS
cvs ci // 提交
此時,只用用戶組csbsOPTS的用戶及admin用戶能對項目csbsOPTS控制操作。
CVS是一个C/S系统,多个开发人员通过一个中心版本控制系统来记录文件版本,从而达到保证文件同步的目的。
先说下CVSNT的用户验证方式,CVSNT的用户验证方式分两种:Windows系统用户与CVSNT用户共存的混合验证方式,及CVSNT用户 单一验证方式,默认工作在混合验证方式下,当然使用单一验证方式对用户的管理肯定比较方便一点,因此下面的配置就是围绕该方式进行的。各个资源库所使用的 验证方式及用户配置由其目录下CVSROOT里的配置文件决定,其中有几个比较重要的文件: config、checkoutlist、admin、group、passwd等。其中,config,checkoutlist企CVSROOT原本有,admin, group文件要自己添加。
本人所用CVSNT版本為:2.5.03(Scorpio)Build 2382
了解了以上内容,下面我说一下我自己的配置步骤,我没有使用WinCVS进行操作,是直接使用命令行进行修改的,觉得这样思路比较清晰:
1、创建仓库:D:/cvs_server/cvstest,仓库名为:/cvs_server
2、进入命令提示符,因为此时为混合验证模式,直接用系统的administrator用户登陆。
命令:
set cvsroot=:pserver:administrator@localhost:/cvstest
cvs login
//输入密码
3、添加CVSNT系统管理员用户,此时会提示设置用户密码:
cvs passwd –r administrator –a cvsadmin
Adding user cvsadmin@localhost
New Password:(此输入密码)
Verify Password:(再次输入密码)
4、由于对于权限的配置都放在CVSROOT下,所以首先要检出服务器上的CVSROOT目录:
(此时还是以administrator用户操作,建议在本地盘上创建一个文件夹,用来存从CVS服务器上checkout文件,本人创建名为:D:/cvs_local)
cd cvs_local
cvs checkout CVSROOT
5、添加admin文件,首先将CVSROOT检出,在CVSROOT下新建admin(無後綴)文件,每
一行一个用户名,内容为:
cvsadmin
执行命令:
cd CVSROOT
cvs add admin
cvs ci
6、修改checkoutlist文件,在该文件末尾添加一行,内容为:
[空格]admin
注意:admin前的空格不能少。
执行命令:
cvs ci
7、修改CVSROOT访问权限:
cd CVSROOT
cvs chown cvsadmin //更改所有者为cvsadmin
cvs chacl –a none //設置目錄的存取权限为none
cvs chacl –u cvsadmin –a read,write,control //添加cvsadmin ,或 cvs chacl –u cvsadmin –a all
cvs commit
8、添加writers文件,控制仓库的write权限。在writers文件中加入要赋予write权限的用户。
writers文件内容如下:
[空格]cvsadmin
[空格]XXXX
注意:前面的空格不能少。
执行命令:
cvs checkout CVSROOT
cd CVSROOT
cvs add writers
cvs ci
(注:如果用户a没有存在于writers文件中,则对cvs模块均没有写权限)
9、修改config文件,按上面的方法首先要從倉庫上check out出來,然後修改文件,修改后再
commit:
config文件是控制CVSNT的验证工作方式,注意该文件最前面的两行:
#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用户来进行验证。
该文件可以在客户端进行修改,因此我们可以将其checkout出来将第二行改为SystemAuth=no,并commit到CVSNT上就可以启用单一验证方式了,注意启用单一验证方式后原来的Windows系统用户将变为无效,因此要注意执行该步骤的时机。
命令:
cvs checkout CVSROOT
cd CVSROOT
// 此时修改config文件
cvs ci
10、此时单一验证方式已经启用了,也就是只能使用刚才添加的cvsadmin进行登录,此时可以
把CVSNT控制面板上的Use local users for pserver authentication instead of domain users关掉。(登录前还要改一下系统变量CVSROOT,关闭命令提示符窗口,修改CVSROOT为:
:pserver:cvsadmin@localhost:4021/CVSNT/Repository ->此处可以不设置) (注:Repository
改为自己创建的仓库)
11、如果为了避免出现错误,先重启一下CVSNT服务器,因为已经启用单一验证方式,先要
进行登录。
命令:
Set cvsroot=:pserver:cvsadmin@localhost:/cvstest
cvs login
//提示输入密码
12、经过以上步骤,可以说用户配置已经基本完成了,CVSNT可以很好的工作在单一验证方式
下。进一步的管理可使用以下命令:
添加用户:
cvs –d D:/cvsproject/csbs passwd -a username //可能会提示添加别名的提示,可不用理会
或用:
set cvsroot=:pserver:localhost:/cvstest
cvs passwd –a username
提示输入密码:…
提示再次输入密码:….
要修改用户权限前前建议先查看一下当前的用户权限,然后再修改权限:
命令:
cvs lsacl //可查询当前的用户权限。
修改项目所对应用户的权限:
命令如下:
cvs chacl –u username –a r|w|c|n projectname(r:Read w:write c:control n:none)
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 没有任何权限
需要说明的是,read|write|create|tag|control 之间没有权力大小之分。
对于create 只有创建目录的权限,如果目录下面有文件,你必须还要有write权限才行。
对于control 如果某用户对某目录有control权限,那么这个用户可以使用cvs chacl命令更改这个目录的权限。
对于all 如果某个用户对某个目录有all权限,那么这个用户将拥有所有权限。
对于tag 不需要有wirte权限也可以tag,但应该给其read权限。
cvs chacl -u g2 -a read,nowrite HelloWorld.java
上述命令赋予g2群组当前目录下HelloWorld.java文档的读权限,拒绝其写权限。
cvs chacl -R -u cvsuser2 -d .
上述命令取消cvsuser2 用户对当前目录对应的服务器目录的所有权限。
需要说明的是:CVS不仅可以对目录做权限控制,还能对文件做权限控制。
注意:这里是一个CVSNT 2.5.03 build 2382 bug
当进入被cvs checkout出来的项目客户端文件夹时,并且这时你并不是使用checkout所使用的帐户登录的,cvs会自动使你变更成为checkout时所使用的帐户。
危害描述:
可以借此漏洞夺得他人帐号控制权,甚至最高管理员权限。
解决方法:
在使用时请勿在他人的计算机上使用自己的帐号checkout项目,尤其是管理员帐号。
总结:每次执行一个用户的权限更新都会累加或者覆盖(操作同一用户的时候)其以前的所有的权限的配置。
13、如果要对包含子目录也要同样的操作刚要加参数-R(-r不行)
命令:
cvs chacl -R -a none
14、删除用户username
[命令]
cvs passwd -X username(X为大写)
15、添加组管理(group),只需同添加admin步骤一样,按照格式要求新建group文件即可。
group文件定义CVSNT中组信息,同组里的用户拥有一样的权限,对组权限的修改和对用户权限的修改一样。[此文件也不在CVSNT里,要自己添加]
group文件的内容为:
csbsWeb:user1 user2 user3
csbsCRM:user4 user5 user6
csbsOPTS:user7,user8,user9
注:user1, user2 and user3 企同一個組,該組為 “csbsWeb”,而user4, user5 ,user6企“csbsCRM”組中.
可以看到该文件的内容也很简单,格式:组名:用户名1,用戶名2…
多个用户名之间用空格隔开。
Group文件可以在客户端修改,不用修改checkoutlist这个文件,系统会自动使其生效。
作为组里面的特定成员可以赋给特定的权限。
例子:對於項目csbsOPTS權限控制。
命令:
cvs checkout csbsOPTS // checkout 項目csbsOPTS
cvs lsacl csbsOPTS // 查看項目的所受權限控制
cvs chacl –a none csbsOPTS // 設置default為none。
cvs chacl –R –u csbsOPTS –a all csbsOPTS // 設置項目csbsOPTS為用戶組csbsOPTS所控制
cd csbsOPTS
cvs ci // 提交
此時,只用用戶組csbsOPTS的用戶及admin用戶能對項目csbsOPTS控制操作。