分享
 
 
 

建立一个安全的Subversion服务器

王朝other·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

最近一个客户聘请了一个网络开发团队来帮助他的工作过度的网管。他们要求我安装一个版本控制系统,这个系统能够保证团队中的任何成员避免无意中修改别人的文件,并且能够给予管理员恢复文件到任何版本的机制。

我的第一个想法就是Subversion。因为它是我写BSD Hacks 时和编辑器一起用的版本控制系统。在Ports Collection中搜索一下之后发现,Subversion需要好几个相关的port。比如,esvn看起来相当适合客户端,因为它的GUI界面能够运行在Unix,Mac OS X以及Windows中。对于一个对Unix技术掌握不深的网络开发团队而言,当他们需要把数据存贮在FreeBSD服务器上而从非FreeBSD系统读取时,esvn是非常好的选择。

前期准备

在我的想法中,只允许开发团队的成员具有权限访问仓库是非常重要的。同时,我们把仓库放在和目前的web服务器分开的操作系统上,当web管理员看到适合的文件时,由他负责把文件从仓库复制到web服务器上。

为了实现这个目的,先对已存在的你想放到版本控制系统下的目录结构做一个备份,然后把它安全发送到仓库服务器。在我的例子中,我把web服务器上www目录的数据备份到一台内网服务器

192.168.2.2上。

# tar czvf - /usr/local/etc/www/data | ssh dru@192.168.2.2 "cat www.tar.gz"

下一步是在仓库服务器上建立一个svn组,并把已存在的需要访问仓库的用户加到这个组中。比如,当我创建svn组后,我在/etc/group加入这句话把已存在的web管理员用户加进去:

# vi /etc/group

svn:*:3690:webadmin

然后,新建一个用户svn。如果有必要,你还需创建所有要访问仓库系统的用户帐号(如果他们还没有创建)。要保证每个用户是svn的成员并且有密码和可用的shell。我使用sysinstall为新的网络工程师建立用户帐号。完成以后,我双击svn组的成员。大概就像这样:

# grep svn /etc/group

svn:*:3690:webadmin,devel1,devel2

处理 umask在安装Subversion之前,我们先看看svn用户的umask。在我的FreeBSD系统上,它是这样的:

# su -l svn

% umask

022

在UNIX中,用户umask值决定了新建目录或文件的默认权限。这是通过关闭某些权限达到的。如果你记得:

r = 4

w = 2

x = 1

你应该看得出这个umask没有对用户(svn)关闭任何权限(0);它对组(svn)关闭了写权限(2);它对其他组用户关闭了写权限(2)。

因为svn组的成员必须能够写入仓库,所以把umask中关于组的 2 改为 0。甚至如果你不想让其他组成员知道这个仓库的存在,你可以把关于其他组成员的 2 改为 7。

修改用户svn的shell配置比较简单。如果用户使用 csh:

% vi ~svn/.cshrc

,那么找到umask那行并把它改为 002 或 007。如果你的svn用户不用csh,修改你的shell配置文件。如果你把你的修改保存在 ~svn/.cshrc (或别的地方),别忘了告诉shell:

% source ~svn/.cshrc

再敲一次 umask 命令,以保证你的修改有效。

安装Subversion ,并让它拥有正确的umask

如果你选择一个002的umask,那么当你从ports collection生成Subversion的时候,你能把一个wrapper编译进去。如果你选择一个007的umask或安装已预编译好的Subversion,那就要创建一个wrapper脚本来保证你的Subversion二进制文件使用你的umask值。

使用wrapper编译,使其umask值为002:

# cd /usr/ports/devel/subversion

# make -DWITH_SVNSERVE_WRAPPER install clean

或者,你可以安装已预编译的二进制代码包

# pkg_add -r subversion

注意:无论使用何种方法,安装之前都应该把这篇文章看完!因为你可以发现一些额外的让你感兴趣的编译选项!

如果你不在wrapper中编译,请移动你的代码到相应的位置,并创建你自己的wrapper脚本:

# mv /usr/local/bin/svn /usr/local/bin/svn.orig# vi /usr/local/bin/svn#!/bin/sh#wrapper script to set umask to 007 on subversion binariesumask 007/usr/local/bin/svn.orig "$@"

设置你的umask值为002或007,使它和syn用户的umask值一样。别忘了设置你的wrapper脚本为可执行的:

# chmod +x /usr/local/bin/svn

创建仓库

既然环境搭好了,那你就可以创建仓库了。用svn用户登录以保证svn用户和svn组拥有你在仓库中创建的文件。在 /usr/home/svn/目录中,键入:

% svnadmin create repository

在这个例子中,我的仓库名为repository。你可以选择任何对你有帮助的名字。svnadmin create 仅仅创建了Subversion工具所需要的目录结构。

% ls -F repository

README.txt dav/ format locks/

conf/ db/ hooks/

注意目录db是默认生成的。因为Subversion使用数据库跟踪仓库中文件的变化,所以你必须把你的数据放到数据库中。然后,我把备份文件解压缩,这样就有的一些可以放进去的数据。但是要注意这么做的时候,不要把备份文件直接恢复到~svn/repository目录下。(记得否,它是个数据库)。相反,我新建了个目录结构:

% pwd

/usr/home/svn

% mkdir www && cd www

% mkdir branches tags trunk

% cd trunk

% tar xzvf /full/path/to/www.tar.gz .

% cd

这样,svn用户的主目录结构像这样:

% ls -F ~svn

repository/ www/

导入数据

下一步,应该把~svn/www/的数据导入到Subversion服务器了。为了实现这个目的,可以使用 svn import 命令:

% svn import www file:///usr/home/svn/repository/www -m "initial import"

svn import 是svn的许多命令中用户可以使用的一条。键入 svn help 可以看到所有可以使用的命令的名字。如果你在svn和help中插入命令,比如 svn import help,你就可以看到那条命令的语法帮助。在svn import后面的是包含要导入数据的目录的名字(www)。你的数据不一定非得在相同的目录下,它仅仅是定义了到数据的完整路径,但必须保证你的svn组用户拥有访问导入数据的权限。注意:如果你已经导入的数据,原始数据就没有必要留在硬盘上了。在我的例子中,我使用了这条命令:

rm -Rf www。

接下来,请注意当我定义仓库的完整路径时所使用的语法。Subversion支持多URL模式或者RA(repository access)模块。检验你的Subversion支持哪种模式:

#svn --version

svn, version 1.1.3 (r12730)

compiled Mar 20 2005, 11:04:16Copyright (C) 2000-2004 CollabNet.Subversion is open source software, see http://subversion.tigris.org/This product includes software developed by CollabNet (http://www.Collab.Net/).The following repository access (RA) modules are available:* ra_dav : Module for accessing a repository via WebDAV (DeltaV) protocol.

- handles 'http' schema

- handles 'https' schema* ra_local : Module for accessing a repository on local disk.

- handles 'file' schema* ra_svn : Module for accessing a repository using the svn network protocol.

- handles svn schema

因为我想要在本地路径访问仓库,所以我使用了file:/// 模式。我还可以在这URL后面加上www,因为我想访问仓库中名为www的目录。当然,你能在同一个仓库中导入多个目录结构,并且用容易记住的名字命名。

最后,我使用了 -m 消息开关把注释:"initial import"加入仓库日志中。如果我不包括这个参数,svn将使用默认编辑器(vi)打开日志并要求我填入注释,否则无法进入下一步。

这是非常关键的一个地方。安装一个版本控制系统的全部原因是为了允许许多用户修改文件,并且有可能是并发的。每一个用户都应该负责任的记录清楚他们对哪些文件作了哪些改动。你的工作就是让他们明白为什么svn命令总是提示他们加入注释。

确定如何访问仓库

恭喜你!你现在拥有了一个可以工作的仓库!现在到了仔细比较各种不同的URL模式并选出最适合你需求的访问方法的最好的时间。

免费电子文档Version Control with Subversion第六章详细介绍了各种可能的配置。你可以在编译FreeBSD port的时候,在 make 命令后添加参数 -DWITH_BOOK,把书安装上。

如果你的用户通过本地或ssh登录系统,可以使用 file:/// 访问。因为用户对于仓库时本地(local)的,所以这种情况下,系统不会打开一个 TCP/IP端口监听Subversion连接。然而,它却要求每个用户有一个活动的shell帐号并且假定你的用户可以登录Unix服务器。和别的shell帐户一样,其安全性能由这几方面决定:用户密码的健壮性;仓库权限以及组成员的正确配置。让用户通过ssh登录系统并不保证session已被加密。

另一种方案是把Subversion整合进apache服务器。默认情况下,Subversion 的FrssBSD port支持SSL编译,这意味着你的用户可以在浏览器中使用 https:// 模式访问仓库。然而,如果你的apache版本是2.X而不是1.X,要记得在编译的时候把参数-DWITH_MOD_DAV_SVN 加入到 make后面。

如果你考虑让用户通过浏览器访问,要先仔细阅读Subversion文档关于apahce httpd配置部分,然后你要配置不少东西。幸运的是,文档很完整!

第三种方案时使用 svnserve 监听网络连接。文档建议采用这种模式,无论是通过inetd还是独

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有