Slackware下CVS服务器的建立和配置

Gavin [Unix/Linux]

2008.11.15

一、系统环境:

操作系统: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文件中加密密码匹配的?

希望知情者告知,万分感谢! (可以留言,也可以发到邮箱:gavin-097[AT]163.com)


评论

输入后可按 Ctrl+Enter 提交评论.