CVS是Concurrent Versions System(并行版本系统)的缩写,它是目前比较流行与优秀的版本管理与控制工具,它深受大多数开发人员与系统管理的喜爱,同时也是用来管理其它日常文档(如word工作文档之类)的一个强有力的工具。
一、 CVS服务器的安装
1、基本安装
首先确认系统中是否安装CVS服务:
# rpm –qa |grep cvs
cvs-1.11.17-1
如果命令输出类似于上面的输出则说明系统已经安装有cvs,否则就需要从安装光盘中安装cvs的rpm包,或者到http://www.cvshome.org下载。
若未安装,运行rpm –ivh cvs-1.11.17-1.i386.rpm 安装:
# rpm –ivh cvs-1.11.17-1.i386.rpm
还可以使用源码包进行编译安装:
# tar -xjpvf cvs-1.11.17.tar.tar
# cd cvs-1.11.17
# ./configure --prefix=/usr/share/cvs --disable-server-flow-control
# make
# make install
以上指令将CVS安装到/usr/share/cvs这个目录上。
2、在服务器端建立Repository根目录 cvsroot
因为这里涉及到用户对cvsroot里的文件读写的权限问题,所以比较简单的方法是建立一个组,然后再建立一个属于该组的帐户,而且以后有读写权限的用户都要属于该组。假设我们建一个组叫cvs,用户名是cvsroot。建组和用户的命令如下
# groupadd cvs
# useradd -g cvs -s /sbin/nologin cvsroot
# chown -R cvsroot /home/cvsroot
接下来进行初始化,建立仓库Repository:
# cvs -d /home/cvsroot init
这样在/home/cvsroot目录中就产生了CVSROOT目录,其中存放了一些配置文件,如config等,然后设置权限:
# chown -R cvsroot.cvs /home/cvsroot
# chmod -R ug+rwx /home/cvsroot
# chmod 644 /home/cvsroot/CVSROOT/config
为了CVS系统的安全,我们要修改/home/cvsroot/CVSROOT/config文件,将"#SystemAuth =no"的前面的注释号#去掉,即改为“SystemAuth =no”(这样,将只有passwd文件里指定的用户才能登录CVS服务器),然后给开发者们逐一建立账号,新建的不要分配用户目录,因为它将作为一个虚拟用户帐号来使用,具体命令如:
# useradd -g cvs -M cyberwh
# passwd cyberwh
上面的命令就创建了一个并没有Home目录的用户cyberwh,接着将系统的shadow文件复制到CVSROOT, 并重命名为passwd:
# cp /etc/shadow /home/cvsroot/CVSROOT/passwd
# chmod 0644 /home/cvsroot/CVSROOT/passwd
然后修改passwd文件,将除刚才设定的可使用CVS的用户cyberwh之外的所有行删除,然后去掉每行第二个冒号以后的所有内容,并添上字符串cvsroot, 改为如下格式:
cyberwh: $1$yh65p/pK$srDuMpEazPhlQOeGsBYN./:cvsroot
然后,删除掉刚刚在系统中添加的那个用户cyberwh:
# userdel -f cyberwh
这样你的CVS用户就只能用passwd中规定的用户来登陆你的CVS服务器了,要注意的是:本文介绍的添加用户的方法适用于小数量的用户,如果是有大规模的开发人员,推荐采用连接LDAP或者数据库来进行用户的认证服务。
3、设置启动CVS服务
在Linux上CVS服务可以通过inetd、xinetd或tcpwrapper等来启动,其中inetd由于安全理由在许多场合已经被xinetd所取代了。这里我们使用xinetd来启动CVS服务。
3.1 在/etc/xinetd.d目录下为CVS服务创建一个配置文件:
#touch /etc/xinetd.d/cvspserver
编辑/etc/xinetd.d/cvspserver,输入如下内容:
service cvspserver
{
disable = no
socket_type = stream
wait = no
user = cvsroot
env = HOME=
server = /usr/bin/cvs
server_args = -f --allow-root=/home/cvsroot pserver
}
注:
1)pserver表示是口令认证的访问方式,这是最常用的方式,其他还有gserver,kserver,ext,如果想要更高的安全性可以使用ssh来加密口令和数据流,不过这里为了用户使用的方便,仍然选的是pserver
2)--allow-root是指定Repository的目录,可以建立多个Repository
3.2 加入cvs服务(如果缺省就有cvs服务,就不用加)
vi /etc/services
cvspserver 2401/tcp #pserver cvs service
cvspserver 2401/udp #pserver cvs service
3.3 重新启动xinetd:
# /etc/rc.d/init.d/xinetd restart
Stopping xinetd: [ OK ]
Starting xinetd: [ OK ]
重新启动xinetd服务后,CVS服务也开始工作了。
3.4 检查cvspserver服务是否已经启动
# netstat -lnp|grep 2401
tcp 0 0 .0.0.0:2401 0.0.0.0:* LISTEN 1041/xinetd
则说明cvs服务器已经运行。
好了,做到这里,CVS的服务器端就已经安装设置好了。
二、管理CVS服务器
服务器可以用了,现在大家最关心的就是如何管理服务器,比如,我想让一些人有读和/或写 CVS 仓库的权限,但是不想给它系统权限怎么办呢?
不难,在 cvs 管理员用户(在我这里是 cvsroot 用户)的家目录里有一个 CVSROOT 目录,这个目录里有三个配置文件,passwd, readers, writers,我们可以通过设置这三个文件来配置 CVS 服务器,下面分别介绍这几个文件的作用:
passwd:cvs 用户的用户列表文件,它的格式很象 shadow 文件:
{cvs 用户名}:[加密的口令]:[等效系统用户名]
readers:有 cvs 读权限的用户列表文件。就是一个一维列表。在这个文件中的用户对 cvs只有读权限。
writers:有 cvs 写权限的用户的列表文件。和 readers 一样,是一个一维列表。在这个文件中的用户对 cvs 有写权限。
上面三个文件在缺省安装的时候可能都不存在,需要我们自己创建,好吧,现在还是让我们用一个例子来教学吧。假设我们有下面几个用户需要使用 cvs:
laser, gumpwu, henry, betty, anonymous。
其中 laser 和 gumpwu 是系统用户,而 henry, betty, anonymous 我们都不想给系统用户权限,并且 betty 和 anonymous 都是只读用户,而且 anonymous 更是连口令都没有。
1、 编辑 cvs 管理员家目录里 CVSROOT/passwd 文件(cvsroot用户),加入下面几行:
laser:$xxefajfka;faffa33:cvsroot
gumpwu:$ajfaal;323r0ofeeanv:cvsroot
henry:$fajkdpaieje:cvsroot
betty:fjkal;ffjieinfn/:cvsroot
anonymous::cvsroot
注意:上面的第二个字段(分隔符为 :)是密文口令。
密码可以有以下几种方法生成:
1.1 安装步骤2中所述。
1.2
vi /home/cvsroot/passwdgen.pl
文件内容:
#!/usr/bin/perl
srand (time());
my $randletter = "(int (rand (26)) + (int (rand (1) + .5) % 2 ? 65 : 97))";
my $salt = sprintf ("%c%c", eval $randletter, eval $randletter);
my $plaintext = shift;
my $crypttext = crypt ($plaintext, $salt);
print "${crypttext}\n";
如果需要密码为:cyberwh,则敲入:
./passwdgen.pl cyberwh
(注意passwdgen.pl要先设为可执行)
回车即可得到加密密码,用其替换passwd文件中的passwd部分就可以了
1.3 使用htpasswd做加密运算。
htpasswd是Apache的一个工具,如果未安装Apache需先安装。查看Apache是否已经安装:
rpm -q httpd
假定建立一个yzx帐号。
htpasswd –n cyberwh
New password:
Re-type new password:
cyberwh:BLoOq1SmcVfbU
其中BLoOq1SmcVfbU就是加密后的密码。
在CVSROOT目录下建立一个passwd文本文件,格式如下:
anonymous::cvsroot(不要密码)
cyberwh:BLoOq1SmcVfbU:cvsroot
2、 编辑 readers 文件,加入下面几行:
anonymous
betty
3、 编辑 writers 文件,加入下面几行:
laser
gumpwu
henry
注意:writers中的用户不能在readers中,要不然不能上传更新文件。
至于客户端的配置,由于我常使用的IDE如 Eclipse、WSAD都比较容易设置,这里就不再罗嗦。
一、 CVS服务器的安装
1、基本安装
首先确认系统中是否安装CVS服务:
# rpm –qa |grep cvs
cvs-1.11.17-1
如果命令输出类似于上面的输出则说明系统已经安装有cvs,否则就需要从安装光盘中安装cvs的rpm包,或者到http://www.cvshome.org下载。
若未安装,运行rpm –ivh cvs-1.11.17-1.i386.rpm 安装:
# rpm –ivh cvs-1.11.17-1.i386.rpm
还可以使用源码包进行编译安装:
# tar -xjpvf cvs-1.11.17.tar.tar
# cd cvs-1.11.17
# ./configure --prefix=/usr/share/cvs --disable-server-flow-control
# make
# make install
以上指令将CVS安装到/usr/share/cvs这个目录上。
2、在服务器端建立Repository根目录 cvsroot
因为这里涉及到用户对cvsroot里的文件读写的权限问题,所以比较简单的方法是建立一个组,然后再建立一个属于该组的帐户,而且以后有读写权限的用户都要属于该组。假设我们建一个组叫cvs,用户名是cvsroot。建组和用户的命令如下
# groupadd cvs
# useradd -g cvs -s /sbin/nologin cvsroot
# chown -R cvsroot /home/cvsroot
接下来进行初始化,建立仓库Repository:
# cvs -d /home/cvsroot init
这样在/home/cvsroot目录中就产生了CVSROOT目录,其中存放了一些配置文件,如config等,然后设置权限:
# chown -R cvsroot.cvs /home/cvsroot
# chmod -R ug+rwx /home/cvsroot
# chmod 644 /home/cvsroot/CVSROOT/config
为了CVS系统的安全,我们要修改/home/cvsroot/CVSROOT/config文件,将"#SystemAuth =no"的前面的注释号#去掉,即改为“SystemAuth =no”(这样,将只有passwd文件里指定的用户才能登录CVS服务器),然后给开发者们逐一建立账号,新建的不要分配用户目录,因为它将作为一个虚拟用户帐号来使用,具体命令如:
# useradd -g cvs -M cyberwh
# passwd cyberwh
上面的命令就创建了一个并没有Home目录的用户cyberwh,接着将系统的shadow文件复制到CVSROOT, 并重命名为passwd:
# cp /etc/shadow /home/cvsroot/CVSROOT/passwd
# chmod 0644 /home/cvsroot/CVSROOT/passwd
然后修改passwd文件,将除刚才设定的可使用CVS的用户cyberwh之外的所有行删除,然后去掉每行第二个冒号以后的所有内容,并添上字符串cvsroot, 改为如下格式:
cyberwh: $1$yh65p/pK$srDuMpEazPhlQOeGsBYN./:cvsroot
然后,删除掉刚刚在系统中添加的那个用户cyberwh:
# userdel -f cyberwh
这样你的CVS用户就只能用passwd中规定的用户来登陆你的CVS服务器了,要注意的是:本文介绍的添加用户的方法适用于小数量的用户,如果是有大规模的开发人员,推荐采用连接LDAP或者数据库来进行用户的认证服务。
3、设置启动CVS服务
在Linux上CVS服务可以通过inetd、xinetd或tcpwrapper等来启动,其中inetd由于安全理由在许多场合已经被xinetd所取代了。这里我们使用xinetd来启动CVS服务。
3.1 在/etc/xinetd.d目录下为CVS服务创建一个配置文件:
#touch /etc/xinetd.d/cvspserver
编辑/etc/xinetd.d/cvspserver,输入如下内容:
service cvspserver
{
disable = no
socket_type = stream
wait = no
user = cvsroot
env = HOME=
server = /usr/bin/cvs
server_args = -f --allow-root=/home/cvsroot pserver
}
注:
1)pserver表示是口令认证的访问方式,这是最常用的方式,其他还有gserver,kserver,ext,如果想要更高的安全性可以使用ssh来加密口令和数据流,不过这里为了用户使用的方便,仍然选的是pserver
2)--allow-root是指定Repository的目录,可以建立多个Repository
3.2 加入cvs服务(如果缺省就有cvs服务,就不用加)
vi /etc/services
cvspserver 2401/tcp #pserver cvs service
cvspserver 2401/udp #pserver cvs service
3.3 重新启动xinetd:
# /etc/rc.d/init.d/xinetd restart
Stopping xinetd: [ OK ]
Starting xinetd: [ OK ]
重新启动xinetd服务后,CVS服务也开始工作了。
3.4 检查cvspserver服务是否已经启动
# netstat -lnp|grep 2401
tcp 0 0 .0.0.0:2401 0.0.0.0:* LISTEN 1041/xinetd
则说明cvs服务器已经运行。
好了,做到这里,CVS的服务器端就已经安装设置好了。
二、管理CVS服务器
服务器可以用了,现在大家最关心的就是如何管理服务器,比如,我想让一些人有读和/或写 CVS 仓库的权限,但是不想给它系统权限怎么办呢?
不难,在 cvs 管理员用户(在我这里是 cvsroot 用户)的家目录里有一个 CVSROOT 目录,这个目录里有三个配置文件,passwd, readers, writers,我们可以通过设置这三个文件来配置 CVS 服务器,下面分别介绍这几个文件的作用:
passwd:cvs 用户的用户列表文件,它的格式很象 shadow 文件:
{cvs 用户名}:[加密的口令]:[等效系统用户名]
readers:有 cvs 读权限的用户列表文件。就是一个一维列表。在这个文件中的用户对 cvs只有读权限。
writers:有 cvs 写权限的用户的列表文件。和 readers 一样,是一个一维列表。在这个文件中的用户对 cvs 有写权限。
上面三个文件在缺省安装的时候可能都不存在,需要我们自己创建,好吧,现在还是让我们用一个例子来教学吧。假设我们有下面几个用户需要使用 cvs:
laser, gumpwu, henry, betty, anonymous。
其中 laser 和 gumpwu 是系统用户,而 henry, betty, anonymous 我们都不想给系统用户权限,并且 betty 和 anonymous 都是只读用户,而且 anonymous 更是连口令都没有。
1、 编辑 cvs 管理员家目录里 CVSROOT/passwd 文件(cvsroot用户),加入下面几行:
laser:$xxefajfka;faffa33:cvsroot
gumpwu:$ajfaal;323r0ofeeanv:cvsroot
henry:$fajkdpaieje:cvsroot
betty:fjkal;ffjieinfn/:cvsroot
anonymous::cvsroot
注意:上面的第二个字段(分隔符为 :)是密文口令。
密码可以有以下几种方法生成:
1.1 安装步骤2中所述。
1.2
vi /home/cvsroot/passwdgen.pl
文件内容:
#!/usr/bin/perl
srand (time());
my $randletter = "(int (rand (26)) + (int (rand (1) + .5) % 2 ? 65 : 97))";
my $salt = sprintf ("%c%c", eval $randletter, eval $randletter);
my $plaintext = shift;
my $crypttext = crypt ($plaintext, $salt);
print "${crypttext}\n";
如果需要密码为:cyberwh,则敲入:
./passwdgen.pl cyberwh
(注意passwdgen.pl要先设为可执行)
回车即可得到加密密码,用其替换passwd文件中的passwd部分就可以了
1.3 使用htpasswd做加密运算。
htpasswd是Apache的一个工具,如果未安装Apache需先安装。查看Apache是否已经安装:
rpm -q httpd
假定建立一个yzx帐号。
htpasswd –n cyberwh
New password:
Re-type new password:
cyberwh:BLoOq1SmcVfbU
其中BLoOq1SmcVfbU就是加密后的密码。
在CVSROOT目录下建立一个passwd文本文件,格式如下:
anonymous::cvsroot(不要密码)
cyberwh:BLoOq1SmcVfbU:cvsroot
2、 编辑 readers 文件,加入下面几行:
anonymous
betty
3、 编辑 writers 文件,加入下面几行:
laser
gumpwu
henry
注意:writers中的用户不能在readers中,要不然不能上传更新文件。
至于客户端的配置,由于我常使用的IDE如 Eclipse、WSAD都比较容易设置,这里就不再罗嗦。