windpws下cvsnt配置与权限分配

来源:互联网 发布:云计算举例 编辑:程序博客网 时间:2024/05/29 10:53

CVS是目前最常用的版本控制和软件配置系统。其开源性在其普及的过程中功不可没,然而正因为开源造成了其易用性较差。往往一个功能需要通过几个看似不相干的操作配合才能进行。Windows下CVS的多帐户配置正是这样一个相当重要的,但很不好操作的功能。几个难点如下:
CVS源自Unix系统,其Windows的移植版并没有服务器功能。在Windows下一般采用安装CVSNT这个软件来建立CVS Repository,但CVSNT的操作方法和原始的CVS略微不同。
CVS本身是命令行形式,其配置过程比较繁杂。
CVS的多帐户配置需要手动修改Repository的CVSROOT文件夹里的文件,缺乏统一的界面。
在安装了CVSNT服务器之后,默认的用户就是建立Repository的Windows系统的登陆帐户,但在多人开发的时候,肯定没人希望大家都使用同一个名字来Commit;更重要的是,我们可能需要配置开发人员的权限,例如限制某些人只能看程序,而某些人可以Commit程序,某些人可以添加新的 Module。以下是详细的步骤,环境是CVSNT 2.5.03 (Build 2151) + TortoiseCVS 1.8.25:
1. 使用CVSNT建立一个Repository。假设初始使用Windows的管理员administrator密码登陆,Repository使用 Pserver协议,IP是1.2.3.4,端口号是2401,Repository名称是/TestRep,密码是123。这时的 administrator也是此Repository的管理员。
2. 为了进行多用户配置,必须修改Repository的CVSROOT目录的几个文件。首先在客户端将:pserver:administrator@1.2.3.4/TestRep设为CVSROOT环境变量(请注意区分CVSROOT目录和 CVSROOT环境变量)。然后用administrator登陆到CVS,最后Check Out出此CVSROOT目录。命令如下所示:
cvs login
//输入密码123
cvs co CVSROOT
3. 在服务器端为Windows添加一个专门用于CVS操作的Windows帐户。所有的CVS帐户都要映射到这个Windows帐户上进行实际的操作。虽然很多资料并没有提到需要建立Windows帐户,但我在实验中发现没有这种帐户,CVS在后边执行任何操作时都会报告没有此帐户的错误。假如这个新的帐户叫做cvsuser。使用Windows命令
net user cvsuser cvsuserpassword /Add
可以添加此帐户。在添加完成之后,一定要记得将/TestRep在服务器上的实际文件夹的权限里添加cvsuser的读写权限,否则到最后任何映射到 cvsuser的CVS帐户都会因为没有写权限无法进行正常的commit操作。首先在服务器上的资源管理器里的“工具”菜单里找到“文件夹选项”,在随后出现的“查看”选项卡里找到“使用简单文件夹共享”的项目,取消掉前面的勾,单击确定。然后右击/TestRep所在文件夹,单击“属性”。在随后打开的对话框里可以看到“安全”选项卡。我们需要在这里添加cvsuser的读写权限。
4.为CVS添加自己的帐户。通过使用命令cvs passwd我们可以添加任意多个CVS帐户(当然,只是针对当前的Repository)。所有的帐户信息会被保存在CVSROOT目录的passwd 文件当中。然而这个文件是不能Check Out出来的,只能在服务器那里看到它,并且其保存的密码信息是被加过密的。我们可以添加cvsadmin,user1,user2,anonymous 等用户。例如添加cvsadmin时的命令是:
cvs passwd -a -r cvsuser cvsadmin
//输入cvsadmin的密码
//再次输入cvsadmin的密码
这样就新添了cvsadmin帐户,并将其映射到Windows帐户cvsuser上(-a表示添加一个账户,-r表示影射到操作系统的帐户中。我期望将 cvsadmin作为以后/TestRep的管理员。这一点十分重要,如果这时候不设置的话,再将CVS改为“仅使用CVS帐户校验模式”之后就再也没有机会添加管理员了(因为只有管理员可以看得到和操作CVSROOT目录)。
5.设定cvsadmin为CVS管理员。在客户端的 CVSROOT目录下新添一个名为admin的文件。在里面将每一个想要升为管理员的CVS帐户的帐户名写到文件中,每行一个帐户名。当然admin文件只有放到服务器,cvsadmin的升迁才能生效。但是,仅仅是这么将admin文件提交上去是不能起作用的。在提交它之前,必须将admin的信息添加到checkoutlist文件中。checkoutlist的格式在文件中有介绍,是“空格文件名 空格 出错信息 回车符”。我们在里面添加一条记录:
admin adminerror
特别注意admin前面一定要留一个空格。
6. 当新的CVS管理员和帐户信息都准备好后,就要将/TestRep的帐户校验模式从“操作系统集成校验模式”修改为“仅使用CVS帐户校验”模式。这么做可以避免为了在CVS中使用多用户时需要操作Windows帐户的麻烦。这个设置的地方在CVSROOT目录中的config文件。打开客户端的 config文件,将里面的#SystemAuth=yes改为SystemAuth=no(注意将#删除后,SystemAuth前不能有空格)。修改后保存config文件。
7.提交CVSROOT里的所有更新到服务器,我们的设置就生效了。命令如下所示:
cd CVSROOT
cvs add -m "" admin
cvs commit -m ""
不过在提交之前,你也许想先把CVSROOT的owner从原来的administrator修改为cvsadmin。使用命令cvs chown可以做到这一点。在提交了CVSROOT目录后,校验模式就立刻改变了,cvsadmin也同时开始生效。这时,用之前的 administrator就无法使用CVS了。我们改用cvsadmin帐户重新登陆,继续下面的操作。
8.修改读写权限。CVS有两种读写权限的设置方法,一是粗粒度的,一是细粒度的。只有CVS管理员才能进行访问权限的修改。粗粒度的方法是在 CVSROOT中添加readers或者writers文件来实现。在readers里添加的任何一个帐户对当前库只拥有读取权限,添加格式是每行一个帐户名。例如,我们在客户端的CVSROOT目录里添加readers文件,将之前的一个新建帐户anonymous放到里面,然后commit这个 readers文件到服务器。anonymous就不能进行commit了。实际的测试结果是在使用anonymous登陆之后执行commit指令,系统会报告正常执行完毕。但实际上,没有任何东西被commit,暴露了CVS在人机界面上的不完善。writers文件的操作readers完全一样。如果一个帐户名被同时写到两个文件里,此帐户只有只读权限。细粒度的方法是使用chacl命令。例如/TestRep里有3个工程,project1、 project2、project3。使用命令:
cvs chacl -u user1 -a none -d project1,project2,project3
cvs chacl -u user1 -a all -d project1
cvs chacl -u user1 -a read,write -d project2
cvs chacl -u user1 -a read -d project3
可以让user1拥有对project1目录的完全控制权,对project2目录的读写权,和对project3目录的只读权。第一条命令首先删除user1的所有权限,在随后的3条命令里分别设置了3个不同目录权限。
9.使用帐户组来组织帐户。在客户端的CVSROOT目录下添加一个叫group的文件。此文件的格式是:
组名1:用户名1,用户名2,用户名3,……
组名2:用户名5,用户名7,……
……
修改完group文件后commit它,然后通过chacl命令可以实现组权限的修改。
-------------------------------------------------------------------------
CVS操作手册 Version 1.1 [转]
——————————————————————————————————–
1 服务器端安装过程
安装前的注意事项:
 本操作手册基于CVSNT 2.5.03 build 2382,操作界面以及选项设置都会随版本的变化而发生一定的改变
 CVS容器(repository)、临时文件夹(TEMP)必须安装于CVSNT所在服务器
 CVSNT应作为〔服务〕,且建议使用SYSTEM账户执行(原因有两点:1、SYSTEM不具有网络权限,也就是说不能被当作远程服务来使用;2、当SYSTEM账户不进行操作的时候,CVSNT服务仍旧在线服务)
 CVSNT建议被运行在采用NTFS文件系统的服务器上(原因有两点:1、NTFS文件系统具备CVS所需要的权限管理的基础;2、NTFS文件系统更加稳定且能够有更大地存储能力)
1.1 CVSNT的安装与配置
1.1.1 创建CVS容器和临时文件夹
例如:D:/CVSNTRepositories (容器) D:/CVSTEMP (临时)(请注意:临时文件夹不可以位于操作系统临时文件夹内。如:C:/winnt/temp 或者 C:/Documents and Settings中)
1.1.2 点击CVSNT安装程序
含客户端、服务器端,进行安装。(请注意:1、如果服务器采用Windows XP、2003或者更高版本则,其〔WMI Service〕服务可能会引起权限拒绝错误,请在安装前将其关闭,安装结束后重新开启即可;2、注意客户端与服务器端版本匹配问题;3、安装后可能需要重新启动)
1.1.3 CVS容器设置
 通过〔开始〕-〔程序〕-〔CVSNT〕-〔CVSNT Control Panel〕打开CVS控制面板(或在控制面板中打开)
 对设置变更前,请停止CVSNT、CVSNT Lock服务
 点击〔Repository configuration〕选项卡
点击〔Add〕新增容器:其中〔Location〕栏位填写/选择容器所在目录(在步骤1中创建的);〔Name〕栏位填写容器名称,必须遵守规则:必须以“/”开头,形如“/CVSNTRoot”。(请注意:如果想要新的容器生效,必须勾选〔Publish Repository〕〔Online〕选项)
1.1.4 CVS临时文件夹设置
点击〔Server Settings〕选项卡,在〔Temporary〕中选择步骤1中创建的CVS临时文件夹。
重新启动CVSNT、CVSNT Lock服务,如果服务不能启动,请检查容器所在文件夹权限设置或重新启动服务器。
1.1.5 更新CVS服务器中的二进制文件列表
(请注意:这是非常重要的,如果不将已知二进制文件类型加入二进制文件列表,当上传此类文件时文件可能被损坏)
在命令行提示符下操作:
SET CVSROOT=D:/CVSNTRepositories/Repo1(以Administrator登录服务器,本地操作模式)
Cvs co CVSROOT
Cd CVSROOT
Notepad cvswrappers (在记事本中编辑列表文件例如)
*.cab -k ‘b’
*.class -k ‘b’
*.doc -k ‘b’
*.dll -k ‘b’
*.exe -k ‘b’
*.exp -k ‘b’
*.gif -k ‘b’
*.gz -k ‘b’
*.jar -k ‘b’
*.jpg -k ‘b’
*.jpeg -k ‘b’
*.lib -k ‘b’
*.msi -k ‘b’
*.mso -k ‘b’
*.pfw -k ‘b’
*.png -k ‘b’
*.ppt -k ‘b’
*.sit -k ‘b’
*.tar -k ‘b’
*.tlb -k ‘b’
*.vsd -k ‘b’
*.xls -k ‘b’
*.wmz -k ‘b’
*.zip -k ‘b’
Cvs commit
1.1.6 服务器端CVS权限设置
CVSNT服务器的权限控制包括两部分:
 NTFS ACL 阻止没有经过授权的人访问CVS容器
 CVSNT ACL 阻止开发人员commit错误的版本分支
CVSNT登录方式有两种:
 Windows用户验证与CVSNT用户验证的混合验证模式
 CVSNT用户验证的单一验证模式
由于Windows不允许任何非真实帐户的对文件系统进行操作,所以使用CVSNT创建的用户其实是Windows用户的别名(映射),其关系如下图:
本文主要介绍混合模式验证的设置方法。
某容器权限的设置步骤:
1) 以Administrator登录服务器
2) 为CVSNT创建Windows用户组、用户
Group Name 描述
CVSAdmins 所有的CVS容器管理权,允许更新所有容器中的文件
CVSAdmin-XXX 某容器的管理权
CVSUsers 所有CVS用户,可以checkout文件,但checkin/commit动作受到CVSROOT/writers文件控制
请注意:如果CVSNT部署于Windows2003+的服务器上,请确认用户组拥有执行CMD.EXE的权限,因为操作系统默认是没有的
3) 设置CVSROOT权限控制文件
CVSROOT filename 描述
Admin 被允许执行CVS管理员指令的用户名单 (不受源代码管理控制)
Passwd 记录CVSNT帐户名称和密码 (经过加密,不受源代码管理控制)
Group 记录CVSNT组信息,格式:
组名:用户名1 用户名2 用户名3 ……
Readers 可以读取数据的用户名单
Writers 被允许进行写操作(commit)的用户名单
config 某CVSNT容器的配置文档
 SystemAuth Yes:混合验证 No:单一验证
 以Administrator登录服务器,切换到命令行方式
 切换到CVS容器所在的文件夹中,例如:D:/CVSNTRepositories/Repo1/CVSROOT
 设置admin文件
通过“echo cvsadmin>> admin”新建admin文件,“username”与“admin”中间不能有空格
 设置writers、config文件(不要在CVS容器文件夹中进行)
Set CVSROOT=:pserver:cvsadmin@host:/Repo1
Cvs login
Cvs co cvsroot
Cd cvsroot
Notepad config
Echo username>> writers (请注意:必须将自己所使用的用户名也添加进去,否则会被死锁,若死锁请到CVS容器中删除writers与writers.v文件即可)
Cvs add writers (当新建此文档时使用)
Cvs commit
4) 设置CVSNT容器所在文件夹权限
Directory/File SYSTEM Administrators CVSAdmins
CVSAdmin-XXX CVSUsers 描述
./CVSNTTEMP Full 开放权限
./CVSNTRepositories Full Full Full Read
./CVSNTRepositories/Repo1 Full Read Full Full 单个容器
./CVSNTRepositories/Repo1/CVSROOT Full Read Full Read 避免普通用户改变配置文件
./CVSNTRepositories/Repo1/CVSROOT/history Full Read Full Change 记录CVS用户历史
./CVSNTRepositories/Repo1/CVSROOT/val-tags Full Read Full Change CVS用户checkout
请注意:history文件在CVSNT 2.5.x版本后发生了较大的变化,CVSNT不会自动生成历史记录,所以容器Repo1中CVSROOT文件夹下没有history文件需要手动创建一个空的文件并命名为history
某容器内项目权限的设置:
1) 添加CVSNT用户
语法:
cvs passwd [-a] [-x] [-X] [-r real_user] [-R] [-D domain] [username]
其中,-a表示添加一个cvsnt用户;-x表示取消一个cvsnt用户;-X表示删除一个cvsnt用户;-r表示把一个cvsnt用户和一个指定的系统用户绑定;-R表示取消一个cvsnt用户和一个系统用户的绑定;-D表示域;username表示要创建的cvsnt用户
不加参数表示修改当前登录用户密码
你可以使用以下命令来创建映射关系:
cvs passwd -a -r
2) 设置CVSNT用户权限
语法:
 Chown
CVS chown [-R] user [directory…]
其中-R 表示递归。
cvs chown -R cvsadmin .
上述命令把当前目录及其子目录对应的服务器目录的owner设置为cvsadmin用户。
 Chacl
CVS chacl [-R] [-r branch] [-u user] [-j branch] [-n] [-p priority] [-m message] [-a [no]{read|write|create|tag|control}[,…]] [-d] [file or directory…]
-R表示递归;
-r branch表示对分支的权限的修改;
-a表示设置用户的权限;
-d表示删除用户的权限。
cvs chacl -R -u cvsuser2 -a read,write,create,tag .
上述命令赋予cvsuser2用户当前目录及其子目录对应的服务器目录的读/写/创建/打标签的权限。
cvs chacl -u g2 -a read,nowrite HelloWorld.java
上述命令赋予g2群组当前目录下HelloWorld.java文档的读权限,拒绝其写权限。
cvs chacl –u cvsuser2 –d .
上述命令取消cvsuser2 用户对当前目录对应的服务器目录的所有权限。
 Lsacl
CVS lsacl [-dR] [file or directory …]
-d表示仅列出目录权限,-R表示递归。
3) 请注意:这里是一个CVSNT 2.5.03 build 2382 bug
当进入被cvs checkout出来的项目客户端文件夹时,并且这时你并不是使用checkout所使用的帐户登录的,cvs会自动使你变更成为checkout时所使用的帐户。
危害描述:可以借此漏洞夺得他人帐号控制权,甚至最高管理员权限。
解决方法:在使用时请勿在他人的计算机上使用自己的帐号checkout项目,尤其是管理员帐号。
1.1.7 测试CVSNT服务
经过以上设置,CVSNT服务器已经部署完毕,需要对其进行连接测试,在命令行模式下操作:
Set CVSROOT=:pserver:username@host:/Repo1
Cvs login
成功则无错误提示。
1.2 CopSSH的安装与配置
在CVS应用中为了提升数据传输的安全性,可以采用SSH通讯协议来替代pserver标准协议,在众多SSH服务程序当中,截至笔者写此文章之时,CopSSH是对各种客户端程序支持最好的开源项目。
 安装过程非常简单,完成后需要〔Activate a user〕,〔开始〕-〔程序〕-〔CopSSH〕
请注意:CopSSH要求必须使用Windows帐户,CVSNT帐户不被支持。可以通过绑定Windows与CVSNT帐户的方法来解决。
 需要从CVSNT安装文件夹中拷贝以下文件到CopSSH安装目录的bin下
cvs.exe
cvsapi.dll
dbghelp.dll
extnt.dll
msvcp71.dll
msvcr71.dll
cvstools.dll
iconv.dll
mdnsclient.dll
 请设置CopSSH临时文件夹的权限

Directory/File SYSTEM Administrators CVSAdmins
CVSAdmin-XXX CVSUsers 描述
./Documents and Settings /SvcCOPSSH.XXX/Local Settings/Temp Full Full Full Full
 连接测试
Set CVSROOT=:ssh:username@host:/Repo1
Cvs login
输入密码后,会要求确认接受public key。
1.3 删除不安全CVS通讯协议(可选)
将位于CVSNT安装文件夹中protocols目录中的相应DLL文件删除即可。
2 客户端的安装过程
安装前注意事项:
 已经安装Microsoft VS系列
 TamTam Plugin是付费软件
客户端的安装相对简单,这里只介绍其中需要注意的几点:
 安装时请首先安装CVSNT客户端。
 TamTam Plugin 捆绑的文本比较工具不支持多字节字符(中文、日文等等),请使用WinMerge,并在设置中对其进行绑定。
 请指定TamTam Plugin所使用的CVS.EXE为CVSNT中的以保持稳定的兼容性。
 为了加快网络传输速度请开启网络压缩选项
 在填写连接字串时,请使用SSH通讯协议,例如::ssh:username@host:/Repo1
3 CVSNT的日常维护
3.1 容器的备份
通过一个脚本文件(加入〔任务计划〕)或者〔备份〕程序进行备份,其中内容形如:
net stop cvsnt
xcopy d:/CVSNTRepositories //server/cvsbackup /Q /S /C /H /R /O /Y
net start cvsnt

原创粉丝点击