Linux CVS服务
1. 设置启动CVS服务
在Linux上CVS服务可以通过inetd、xinetd或tcpwrapper等来启动,其中inetd由于安全理由在许多场合已经被xinetd所取代了,这里我们使用xinetd来启动CVS服务。
在/etc/xinetd.d目录下为CVS服务创建一个配置文件,比如:/etc/xinetd.d/CVSpserver,编辑/etc/xinetd.d/CVSpserver,输入以下内容:
service CVSpserver
{
disable = no
socket_type = stream
wait = no
user = root
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
然后重新启动xinetd:
[root@terry bin]# /etc/rc.d/init.d/xinetd restart
Stopping xinetd: [ OK ]
Starting xinetd: [ OK ]
重新启动xinetd服务后,CVS服务也开始工作了。
2. 在CVS服务器端建立Repository
首先要创建一个名为CVS的组和一个名为CVSroot的用户,以后要访问CVS服务的用户加入CVS这个组:
[root@terry root]# groupadd CVS
[root@terry root]# useradd -g CVS -s /sbin/nologin CVSroot
[root@terry root]# chown -R CVSroot /home/CVSroot
接下来进行初始化:
[root@terry root]# CVS -d /home/CVSroot init
这样在/home/CVSroot目录中就产生了CVSROOT目录,其中存放了一些配置文件,如config等,然后设置权限:
[root@terry root]# chown -R CVSroot.CVS /home/CVSroot
[root@terry root]# chmod -R ug+rwx /home/CVSroot
[root@terry root]# chmod 644 /home/CVSroot/CVSROOT/config
为了CVS系统的安全,我们要修改/home/CVSroot/CVSROOT/config文件,将“#SystemAuth =no”前面的注释号#去掉,即改为“SystemAuth =no”,然后给开发者们逐一建立账号,新建的不要分配用户目录,因为它将作为一个虚拟用户帐号来使用,具体命令如:
[root@terry root]# useradd -g CVS -M bogus
[root@terry root]# passwd bogus
上面的命令就创建了一个并没有Home目录的用户bogus,接着将系统的shadow文件复制到CVSROOT, 并重命名为passwd:
[root@terry root]# cp /etc/shadow /home/CVSroot/CVSROOT/passwd
[root@terry root]# chmod 0644 /home/CVSroot/CVSROOT/passwd
然后修改passwd文件,将除bogus之外的所有行删除,然后去掉每行第二个冒号以后的所有内容,并添上字符串CVSroot, 改为如下格式:
bogus:ND5$J8N9BW5DKV.nPdxfdsh:CVSroot
然后,删除掉刚刚在系统中添加的那个用户bogus:
[root@terry root]# userdel -f bogus
======== 用户创建附加说明
普通cvs用户不使用linux系统帐户,而是使用cvs自身的用户验证系统,映射cvs用户到linux的系统帐户上。
常用的方法是,为每个工程建立一个等效系统帐户,限制其登录,只作为映射使用,且此帐户应该是cvs组的成员。
命令如下:(XXX用实际的项目名代替)
#adduser -g cvs -G cvs -s /bin/false -d /opt/cvsbase/srchome/XXX -M XXXcvs
创建cvs用户
可以使用htpasswd工具生成加密后的密文,也可以使用perl编写小的passwd加密脚本。
方法一:perl脚本
加密用的perl脚本内容如下:
# File begin
#!/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”;
# EOF
文件保存到/opt/cvsbase/cvspasswd.pl,并赋予可执行权限:
#chmod +x /opt/cvsbase/cvspasswd.pl
这样,通过运行
#/opt/cvsbase/cvspasswd.pl “密码”
就可以得到密码加密后的密文。
方法二:htpasswd工具
#htpasswd -c cvspasswd cvsusername
输入两次密码后,加密后的密文就保存到了cvspasswd文件里。冒号后的一段就是密文。
不管用哪种方法,得到密文后,编辑项目cvs仓库下的/CVSROOT/passwd文件,以如下格式添加用户:
cvsusername:加密后的密文:XXXcvs
上例共三部分,分别是要添加的cvs用户名、cvs用户密码加密后的密文、被映射到的linux系统帐户。
cvs用户名自定义,密文用上面的cvspasswd.pl脚本生成,被映射的linux系统帐户在第5步开始处建立。
如果cvs用户需要有写的权限,那么用户名添加到项目cvs仓库的CVSROOT/writers文件里,每行一个用户。
#echo cvsusername >> writers
如果需要只读权限,就把用户名添加到项目cvs仓库的CVSROOT/readers文件里,每行一个用户。
#echo cvsusername >> readers
需要注意的是,拥有写权限的用户名不能再次出现在readers文件中,换句话说,每个用户在两个文件中最多只能出现一次。
相关文章:
