发布时间:2014-09-05 17:35:21作者:知识屋
cvs(Concurrent Version System)是一种非常普及的版本控制工具。尽管其功能不如Perforce、Subversion等强大,但由于其便于配置、使用简单,并且,推出时间较长,因此在各种个样的软件项目中应用十分广泛。
首先是安装FreeBSD并应用安全补丁。这一步非常简单,下载一张FreeBSD(即将推出的5.2-RELEASE是一个不错的选择,在这篇文章发表时,这个版本可能已经能够下载了)的mini iso烧成CD-ROM,然后安装就可以了(选择“Minimum”安装)。注意,为了能够使用ssh验证,请务必安装crypto。为这台机器配置网络,等等之后,重新启动就好了。
然后是安装一些必要的package。FreeBSD 4.x内建了perl,而在5.x中,perl被从基本系统中删去了。为了能够更好地使用包括ACL、commit mail在内的一系列功能,必须安装perl。
我个人推荐使用ports中的5.8.x版本的perl。在安装之前,首先确信系统中没有perl 5.6.x的安装,对于新系统,大可以放心地执行下面的命令:
这将删除已经存在的任何package。一般来说,绝大多数FreeBSD用户都使用cvsup来更新系统,然而在发行的光盘中,cvsup-without-gui并没有包含在内,而普通的cvsup package则需要X11的一系列库。为了避免麻烦,可以考虑下面两种不同的途径来完成第一次的代码更新工作:
1、使用FreeBSD中的cvs来同步代码:
cvs -d :pserver:anoncvs@anoncvs.jp.FreeBSD.org:/home/ncvs login
输入“anoncvs”,回车
cd /usr
cvs -R -d :pserver:anoncvs@anoncvs.jp.FreeBSD.org:/home/ncvs export -r RELENG_5_2 src ports
注意:如果你使用的不是5.2-RELEASE,请适当地修改RELENG_5_2(例如,4-STABLE是RELENG_4,-CURRENT是HEAD,等等)
2、安装cvsup-without-gui:
pkg_add -r cvsup-without-gui
然后用cvsup来同步代码,限于篇幅,这里不再赘述
我个人推荐使用第一种方法,当然,第二种方法应该会更快一些,而且不需要手工编译cvsup。随后,安装Perl 5.8.x:
cd /usr/ports/lang/perl5.8 && make all install clean && rehash
紧接着我们会遇到一个很严重的问题:ports里面的use.perl脚本并不知道系统中原本没有安装perl,因此在执行的时候会出错――这时,只需要为perl做一个符号连接就可以了。做好之后,执行:
use.perl port
这样use.perl脚本会帮助你完成修改配置文件(如/etc/make.conf)等一系列工作。此处不表,稍微配置一下OpenSSH(sshd)的配置,一般来说,增加下面两行:
Protocol 2
PasswordAuthentication no
这么做的好处:(1)只允许ssh2协议登录,这能够提供更好的安全性(2)不允许使用口令登录,这毫无疑问地将提高安全性。
1、创建cvs repository
好了,前期配置基本上就结束了。不要忘了创建一个用于cvs用户的组,例如,ncvs,以及一个用于管理cvs repository的用户,如repoman(它当然要属于ncvs那个组),然后,创建一个目录来保存cvs repository,本例中,我们把它放到/home/ncvs中:
rm -rf /home/ncvs
mkdir -p /home/ncvs
chown -R repoman:ncvs /home/ncvs
chmod -R 775 /home/ncvs
接下来就是初始化这个repository了,简单地执行:
su -l repoman
cvs -d /home/ncvs init
就可以了。
目前,所有的FreeBSD版本中包含的cvs都存在一个微小的安全漏洞,尽管这个漏洞只能在本地利用,但建议您把它补上方法是找到 /usr/src/contrib/cvs/src/expand_path.c 中的
return current_parsed_root->original;
一行,把它改为
return current_parsed_root->directory;
当然,接下来就是重新make world kernel了。需要说明的是,如果您使用的是5-CURRENT,还需要修改一些代码才能让它达到5.2-RELEASE那样的性能(-CURRENT中打开了大量的调试选项),具体方法这里不再赘述。
2、配置commitmail和ACL
接着配置cvs commitmail和ACL。我个人认为commitmail是团队软件开发中非常重要的一件东西,对于cvs来说,这一点尤为重要,因为cvs没有原子提交功能,而commitmail恰好弥补了这个不足。
FreeBSD的开发团队使用了一套很好的perl脚本来完成commitmail的功能,同时,他们还使用cvs的hook实现了简单的访问控制功能(ACL)。我本人使用的cvs repository基于FreeBSD的CVSROOT,并且作了少量的修改。
使用这个CVSROOT覆盖您的CVSROOT,并且,您还需要把其中freebsd目录下的mailsend.c编译并将结果放到/usr/local/bin中(这个CVSROOT中的脚本假定这件事)。另外,这个CVSROOT需要一些修改才能正式投入使用(例如,机器名,等等)。这些设置可以在cfg_local.pm里面找到:
$MAILADDRS = cvs-all@example.org;
这个是commitmail将要发送到的地方。
$MAIL_BRANCH_HDR = "X-Phantasm-CVS-Branch";
这个是将要添加到commitmail头部的信息,如果您使用邮件列表的话,它能够帮助邮件列表自动分拣。
$MAILBANNER = "The Phantasm Studio repository";
这一行将出现在commitmail中,表示commit到了哪一个repository。
if ($hostname =~ /^cvs.example.org$/i)
这个是判断commit的主机名的
$CVSWEB_URL = "http://cvsweb.example.org/cgi-bin/cvsweb.cgi";
这个是cvsweb服务的网址
简单介绍一下CVSROOT中的其他文件
avail: 这个文件用于控制用户组的访问权限。
access: 这个文件用于控制谁能够执行cvs操作。
exclude: 这个文件用于控制那些文件不需要检查cvs tag
options: 这个文件用于控制cvs tag的展开,例如,可以定义$Phantasm$,等等
3、配置用户和限制ssh权限
使用ssh验证的一个比较让人头疼的问题就是,ssh意味着用户拥有一个系统账号,并且,他们能够登录进来。如果配置不当,他们还能得到一个shell,这很自然地会成为潜在的安全隐患。
因此,必须非常小心地处理cvs的ssh验证问题。基本的原则是:禁止用户作任何操作,除非我们允许他们这么做。
按照下面的规则创建用户:
用户的“主”组是ncvs(这不仅限制用户的权限,也让我们能够更容易地控制其他用户不能在cvs repository里面随意commit)
用户不使用口令验证,这将缓解由于不正确地设置ftp等造成的安全隐患
仍然给用户一个shell,这个“shell”可以是一个perl脚本,它只允许执行cvs 开头的命令
随后,让用户使用openssh的ssh-keygen生成自己的密钥对。OpenSSH在绝大多数*BSD和Linux发行版中都可以找到,如果用户使用的是Windows桌面,则需要安装cygwin(特别地,安装net中的OpenSSH),当然,执行的命令是一样的:
ssh-keygen -t dsa -b 2048
对于偏执狂型安全爱好者,可以考虑将-b后面的2048换成4096。当然,根据木桶原理,如果你真是一个偏执狂的话,显然也应该强迫你的所有合作者也都使用至少和你一样长的密钥:)
linux一键安装web环境全攻略 在linux系统中怎么一键安装web环境方法
Linux网络基本网络配置方法介绍 如何配置Linux系统的网络方法
Linux下DNS服务器搭建详解 Linux下搭建DNS服务器和配置文件
对Linux进行详细的性能监控的方法 Linux 系统性能监控命令详解
linux系统root密码忘了怎么办 linux忘记root密码后找回密码的方法
Linux基本命令有哪些 Linux系统常用操作命令有哪些
Linux必学的网络操作命令 linux网络操作相关命令汇总
linux系统从入侵到提权的详细过程 linux入侵提权服务器方法技巧
linux系统怎么用命令切换用户登录 Linux切换用户的命令是什么
在linux中添加普通新用户登录 如何在Linux中添加一个新的用户
2012-07-10
CentOS 6.3安装(详细图解教程)
Linux怎么查看网卡驱动?Linux下查看网卡的驱动程序
centos修改主机名命令
Ubuntu或UbuntuKyKin14.04Unity桌面风格与Gnome桌面风格的切换
FEDORA 17中设置TIGERVNC远程访问
StartOS 5.0相关介绍,新型的Linux系统!
解决vSphere Client登录linux版vCenter失败
LINUX最新提权 Exploits Linux Kernel <= 2.6.37
nginx在网站中的7层转发功能