Slackware下CVS服务器的建立和配置 实际上和rhel5下的大同小异

软件版本控制   2009-01-06 14:00   阅读106   评论0  
字号:    

一、系统环境:

操作系统:slackware 11.0
CVS版本:1.11.22,slackware 11.0下默认的版本
Shell  :BASH
说明  :以下说明中,"root#"表示超级用户运行的命令,"user$"表示用户"user"运行的命令,其它表示命令内容。

 

 

二、CVS服务器的安装:

2.1、建立用户组cvs:
root# groupadd cvs

 

2.2、建立cvs组的用户cvsroot以及其所属的目录:
root# useradd -g cvs -G cvs -d /home/cvsroot cvsroot

 

2.3、为用户cvsroot添加密码:
root# passwd cvsroot
root# <password>

 

2.4、改变/home/cvsroot的目录属性:
root# chmod -R 775 /home/cvsroot

 

2.5、改变用户登陆身份:
root# su cvsroot
root# <password>

 

2.6、创建资源库(repository)目录(这里创建两个: project和test)
cvsroot$ cd ~
cvsroot$ mkdir test
cvsroot$ mkdir project

 

2.7、初始化资源库,使之成为CVS的respository:
cvsroot$ cvs -d /home/cvsroot/test init
cvsroot$ cvs -d /home/cvsroot/project init
cvsroot$ chmod -R 775 ./test/ ./project

 

2.8、退出当前登陆用户cvsroot,切换到root用户身份:
cvsroot$ exit

 

2.9、建立CVS服务启动文件,在Slackware下默认使用inetd方式
root# vi /etc/inetd.conf

在文件尾添加:
# cvs server
cvspserver stream tcp nowait root /usr/bin/cvs cvs -f --allow-root=/home/cvsroot/project --allow-root=/home/cvsroot/test pserver

注意:上面一行必须在同一行内

 

2.10、加入系统服务:

查看是否已加入系统服务:
root# cat /etc/services |grep cvspserver

如果出现:
cvspserver      2401/tcp   #CVS network server
cvspserver      2401/udp   #CVS network server
就说明系统已自动加入该服务,否则,则添加上面两行到/etc/services

 

2.11、重启cvs服务:
root# /etc/rc.d/rc.inetd restart

 

2.12、检查cvspserver服务是否已经启动:
root# netstat -l |grep cvspserver

如果有以下结果,则表示启动成功:
tcp        0      0 *:cvspserver            *:*                     LISTEN

 

 

三、CVS服务的用户管理

下面为2.7步建立的两个资源库test和project建立cvs用户

 

3.1、创建可以登陆cvs服务器的用户名和密码:
root# su cvsroot
cvsroot$ cd ~
cvsroot$ vi test/CVSROOT/passwd
pub:
gavin:********:cvsroot
test:********:cvsroot
cvsroot$ cp test/CVSROOT/passwd project/CVSROOT/ #这里两个资源库都使用相同的用户,也可以分别指定

这里说一下passwd文件的格式和作用:
(1)格式:
  cvs用户名:加密密码:系统用户
  第二、第三段(即密码和系统用户)可以省略,省略时其前导":"符号要去掉,否则表示"空串"
(2)作用:
  将cvs用户映射到系统用户,这样就可以通过系统用户的权限来分配给cvs用户不同的权限,而不需要让用户知道系统用户名和密码。
(3)注意: 
  A. passwd文件默认并不存在,需要自己创建。
  B. 密码字段一定要用加密的密码,而不能用明文密码,而登陆的时候则用明文密码。

 

 

3.2、 为passwd的密码字段添加加密密码:  

3.2.1. 生成加密文件:
cvsroot$ vi genpasswd.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} ";

 

3.2.2. 设置加密文件为可执行:
cvsroot$ chmod a+x genpasswd.pl

 

3.2.3. 将明文密码加密:
如果想在用户登陆时输入密码:"abcd1234",则运行以下命令:
cvsroot$ ./genpasswd.pl "abcd1234"
回车即可得到加密密码,将之替换passwd文件中的********,
那么cvs用户登陆时输入明文密码"abcd1234"则可登陆。
这里将得到的加密密码添加到用户gavin的密码字段,则cvs用户gavin登陆时用明文密码"abcd1234"。

 

 

3.3、配置读写权限

设置用户的读写权限,要创建CVSROOT目录下的readers和writers文件(默认没有的)。
readers文件记录拥有只读权限的用户名
writers文件记录拥有读写权限的用户名
注意:readers文件比writers优先,即出现在readers中的用户将会是只读的,不管
writers文件中是否存在该用户。

cvsroot$ vi test/CVSROOT/readers
pub
cvsroot$ cp test/CVSROOT/readers project/CVSROOT/
cvsroot$ vi test/CVSROOT/writers
gavin
test
cvsroot$ cp test/CVSROOT/writers project/CVSROOT/

 

 

3.4、彻底防止使用系统帐号登陆:

要编辑CVSROOT目录下的config文件,改
#SystemAuth=yes
为:
SystemAuth=no

至此,CVS服务器的安装、用户配置就算完成了,下面来测试一下:

 

 

四、测试安装配置

cvs登陆命令为:
cvs -d :pserver:cvsuser@serveraddr:respositorydir login

如在我测试的环境下用以下命令:
cvs -d :pserver:gavin@192.168.1.15:/home/cvsroot/test login
cvsroot$ <password> #输入明文密码"abcd1234"

运行命令之后,如果什么也没提示,那就表示成功了,否则,根据错误找原因。

 

 

五、注意事项:

 

5.1、在2.9步中,添加的命令:
cvspserver stream tcp nowait root /usr/bin/cvs cvs -f --allow-root=/home/cvsroot/project --allow-root=/home/cvsroot/test pserver
必须在同一行,否则登陆时会出现以下错误:
cvs [login aborted]: reading from server: Connection reset by peer
这是因为cvspserver启动不正确,虽然它已经在监听Connection,但cvs服务还没启动。

 

5.2、在3.2步设置passwd文件的密码字段时,密码一定要用加密密码(加密方法见3.2步),
而登陆密码则用明文密码。否则会出现以下错误:
cvs login: authorization failed: server 192.168.1.15 rejected access to /home/cvsroot/test for user gavin

 

 

六、心得体会:

在配置cvs服务的过程中,5.1和5.2的两个错误折腾了我很久。但也是在解决这两个问题的过程中,学到了很多东西,
包括CVS服务的原理和内部工作过程等。此外,也加深了对Linux权限管理系统的理解。

 

 

七、疑惑:

虽然配置过程中对大多数过程都已明其然,但还有两个问题没有搞明白,就是:
1、将cvs虚拟用户映射为系统用户的时候(3.2步),为何不需系统用户的密码认证?而只通过passwd文件中的密码映射就可以啦?

2、为什么passwd的密码字段一定要用加密密码?这个加密密码一定要用genpasswd.pl文件来生成么?或者随便一个都可以?登陆的时候用的却是明文密码,它又是如何与passwd文件中加密密码匹配的?

评论(?)
阅读(?)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
网易公司版权所有 ©1997-2009