您现在的位置: 捷凌网安 >> 文章中心 >> 网络管理 >> 正文
如何配置和使用SSH验证CVS系统服务器

作者:佚名 责任编辑:左决 点击数: 更新时间:2008-5-1 8:37:27

  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脚本赐瓿蒫ommitmail的功能,同时,他们还使用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.当然,根据木桶原理,如果你真是一个偏执狂的话,显然也应该强迫你的所有合作者也都使用至少和你一样长的密钥:)

    之后,管理员应该把用户(commITter)的key放到服务器上用户对应的文件夹中的authorized_keys里面。例如,我的一个public key如下:

    ssh-dss AAAAB3NzaC1kc3MAAAEBAL+1jinOw+86RcTEaSM5/Hz4Lr9tIS0IQsX8ebo

    TwLzWnqpOHRh2KBCGn/e0xGCIAai7PGz7c+SZCvrLiRvG9mCsMMMue8ZIL+QF4OAmMd

    Cz8Qoyg0cc4YXImOd+UEpdOX29PC4aMAz28v/GO2yf58/Qa49Clfq1kHa/8q3IAgs9o

    W95/ArG+IWFOsN1Tv9nh4XJb5AQjpa5uMlB5SEmvKGTXQ2oYiRVIxL8vzHL6MtO/8x1

    j8+RioSH6FCpEXS7UJbYxE7vF3m5Fa5o6g2dIZewphsleOeHkvYJ442Hqvsly3p4+4N

    dvim4bY2HMDha5r5zeTV8tTlOz4wQVgKyWoEAAAAVAINGzX7uU0vR8l63qhBhUeWGZt

    C9AAABADWiO+9bvV7DApsn08LR1eoEnMjJFQgEfGlbV+EvZHkO0bkHZAdRIKtVmgNUw

    G6uufykkt2Tb+q5SbVNZkzeaFVv4ZMtnjSvEPIZrEXcQFFguGk1IT5v5EYcmq4G8+j1

    BFTVHef4b1wMTSt11WtEz0LUYncuZ6LA48/WGTuZiSm8JkchgVm8HhR9NqjdeFJH8sO

    RUhUBoxyWjo/hv7zFg7HqoJGzeNfrEhFg36psR2RDaRvSP0vN1W2q4j5OZy3gB6ZyVt

    nsEPl1HELhlaCFifmdz1LVxDx+FyPy6wMsPQLTmB1g6N1J6PWy3qCTJ0NyQgarSt3/A

    TQ0InF1BOdJn8QAAAEAPb1OgswuMHdEsHk2ETZVmOKOkI9Rjf72vjZ3xG45iEbCH/7p

    aTP8OQmJMW9FD4MHjdmtktPVYXDIa9Hj/IM44zhfMHEdKs9LlFUK5dBgNUps+yPj2Ns

    Mr2rl771ODR0mB52FwrXm1FCmNTM7WQpFOEy/QhtZRpHK+7/YZp7PBggt17Fw7rbjP2

    zhWnZluoSKLgvfkhxhJuOMm/ElNJx2c+XHdxPqI3eR5UxzLNjDUNh59I8+h+E69bFB3

    b2uhKqziziHOQcqoH5r0Kud/DBBE79lU3mRUF8FQNygCRh/V3yFzed40rc0nF0PQpNZ

    6zodDTJByrm6vX5wr2lI4RgA9w== bITripper@grimreaper.delphij.net

    说明:public key是不允许折行,这里是为了排版方便。我们刚才给用户开了shell,这仍然是潜在的隐患,于是我们收紧这方面的安全性,在public key项目前加入下面的文字:

    command="/usr/bin/cvs ——allow-root=/home/ncvs server"

    于是,整个行看起来应该像下面这样:

    command="/usr/bin/cvs ——allow-root=/home/ncvs server" ssh-dss AAAAB

    ……

    X5wr2lI4RgA9w== bITripper@grimreaper.delphij.net

    这个command的意思是ssh上来就执行/usr/bin/cvs ——allow-root=/home/ncvs server这个命令,而且,只能执行这个命令。这样,除非在cvs本身中存在漏洞,否则,不可能通过ssh切出真正的shell.——allow-root限定了能够使用的repository,这样,用户不能随便指定其他的reposITory,因而,试图破坏安全性将变得更加困难。如果需要多个reposITory,也可以指定多个allow-root参数。

    需要说明的是,如果用户拥有多个public key,则需要在每个public key之前指定command.

    4、配置cvsweb

    配置cvsweb是相当简单的。首先安装apache(我尝试过1.3.x和2.0.x),配置停当,从port里面安装cvsweb就可以了:

    cd /usr/ports/devel/cvsweb && make all installl clean

    然后去修改它的配置文件:

    cd /usr/local/etc/cvsweb

    vi cvsweb.conf

    找到

    @CVSreposITories = (

    一行,按照其中的例子在下面增加自己的reposITory,例如:

    'ncvs' => ['New CVS ReposITory', '/home/ncvs'],

    有多少写多少,当然,@CVSrepositories的第一个将是直接访问cvsweb.cgi时出现的reposITory.

    在FreeBSD 5.1-CURRENT的开发过程中所进行的一些修改造成了ports中的cvsweb无法正常地调用cvs和rcs工具,这将导致它无法正常工作。为了解决这个问题,可以从下面的网址找到最新版本的cvsweb:

    http://www.freebsd.org/projects/cvsweb.html

    笔者撰写本文时,最新的cvsweb版本是2.9.1 beta.在安装之前,需要先安装另外两个port:

    cd /usr/ports/devel/p5-IPC-Run && make all install clean

    cd /usr/ports/net/p5-URI && make all install clean

    然后把下载的tbz文件解包,复制到适当的位置(cgi-bin和相关的图片目录)就可以用了.

  • 上一篇文章:

  • 下一篇文章:
  •  
    最进更新
    普通文章瑞星公司06月04日发布 每日计06-04
    普通文章陕西省地震局网站两次遭到"黑06-04
    普通文章谨防"Flash蛀虫"病毒 已感染06-04
    普通文章安全预警:“肉鸡猎人”抓肉06-04
    普通文章灰鸽子伪装成MSN、QQ等常用图06-04
    普通文章微软:Safari浏览器存在安全06-04
    普通文章中国黑客被疑导致美国2003年06-04
    普通文章微软建议用户暂停用苹果Safa06-04
    普通文章台北世贸中心官网被挂马06-04
    普通文章电脑身份验证无处不在 让黑客06-04
     
    推荐文章
    推荐文章触目惊心 专家解读黑色产业链06-04
    推荐文章网络黑色产业链日渐成型 奥运06-04
    推荐文章保护DNS服务器十大技巧06-04
    推荐文章Vista在非常规状态下数据备份06-04
    推荐文章Linux IPv6环境下DNS服务器配05-01
    推荐文章信息安全:阻止SSH口令尝试工05-01
    推荐文章解决网内终端无法通信故障05-01
    推荐文章熟透各种特殊IP地址 将IP藏一05-01
    推荐文章IE用户减少,黑客盯上Safari 05-01
    推荐文章我国网络安全形势非常严峻 应04-30
     
    热点文章 
    普通文章灰鸽子伪装成MSN、QQ等常用图06-04
    普通文章中国黑客被疑导致美国2003年06-04
    普通文章电脑身份验证无处不在 让黑客06-04
    推荐文章触目惊心 专家解读黑色产业链06-04
    普通文章Windows系统用户摆脱黑客攻击06-04
    普通文章病毒导致输入法无法切换的处06-04
    普通文章Informix注入整理05-23
    普通文章Cookies的注入方法和原理05-23
    普通文章SQL注射修改难猜解的MD505-23
    普通文章黑客眼中的OpenSSL:强大的密05-05

    | 设为首页 | 加入收藏 | 联系站长 | 广告服务 | 友情链接 | 版权申明 | 网站地图 |

    在线交流 捷凌网安主群:51649627
    Copyright 2007-2008 © 捷凌网安. All rights reserved.
    备案序号:蜀ICP备08001812号