Chinaunix首页 | 论坛 | 博客
  • 博客访问: 342181
  • 博文数量: 66
  • 博客积分: 4010
  • 博客等级: 上校
  • 技术积分: 2204
  • 用 户 组: 普通用户
  • 注册时间: 2007-01-23 12:53
文章分类
文章存档

2010年(20)

2009年(30)

2008年(16)

我的朋友

分类: WINDOWS

2009-06-19 13:48:13

Linux安全配置Svn+Apache+SSL

     Ubuntu Linux,Apache HTTP Server 2.2.11 (),subversion-1.6.2.tar.gz , subversion-deps-1.6.2.tar.gz ( /ProjectDocumentList?folderID=260expandFolder=74),OpenSSL ()。



1,安装apache:
#tar -zxvf httpd-2.2.11.tar.gz    
#cd httpd-2.2.11               
#./configure   --enable-dav --enable-dav-fs --enable-so   --enable-ssl --enable-maintainer-mode -prefix=/usr/local/apache2   --enable-mods-shared=all
#make                         
#make install
                     
2,安装SVN:
# tar zxvf subversion-1.6.2.tar.gz             
# tar zxvf subversion-deps-1.6.2.tar.gz           
# cd subversion-1.6.2  
# ./configure --prefix=/usr/local/subverion --with-apxs=/usr/local/apache2/bin/apxs --with-apr=/usr/local/httpd-2.2.11/srclib/apr/  --with-apr-util=/usr/local/httpd-2.2.11/srclib/apr-util --with-ssl

/*其中/usr/local/httpd-2.2.11是apache的源代码的目录,请根据实际情况修改。*/
/*在make 的时候可能会遇到缺少 srclib/apr/libapr-1.la,srclib/apr-util/libaprutil-1.la 两个文件,找不到而make error.
解决办法:/usr/local/apache2/lib/ 中找到,将其复制到源代码文件夹相应的位置中.*/

# make install 
# svnadmin –-version   

3,安装openssl
tar zxvf openssl-0.9.8i.tar.gz
cd openssl-0.9.8i
./config
make
make install


4,创建一个 Subversion 版本库:
# 创建文件夹
$ mkdir -p /etc/svn/SVNRepository
# 运行创建版本库的命令,指定数据存储为 FSFS,如果要指定为 Berkeley DB,则将 fsfs 替换为 bdb
$ svnadmin create --fs-type fsfs /etc/svn/SVNRepository

5,查看生成的版本库结构:
$ ls -l /etc/svn/SVNRepository

6,创建项目临时目录,建议目录结构如下:
   mkdir -p /etc/svn/tmp/project_exam/trunk tags branches
  /**********************************************************
   然后将项目文件复制到trunk下,如果是从CVS转移过来的项目,用下面命令清理目录
   #find projectname/ -name CVS -exec rm -rf {} \;
   **********************************************************/

7,导入source
   [root@localhost /etc/svn/tmp/project_exam/trunk/exam_online] # /usr/local/subverion/bin/svn import -m "initial import" /etc/svn/tmp/ file:///etc/svn/SVNRepository/
   /***********************************************************
   -m 后面跟的是操作注释 /opt/sv/tmp是项目文件位置 file:///etc/svn/SVNRepository是创建的软件仓库
   ***********************************************************/

8,检查是否倒入成功
   #svn list --verbose file:///etc/svn/SVNRepository/
   /***********************************************************
   如果成功你看到到你倒入的项目列表,按我的操作步骤应该不会有错
   ***********************************************************/

9, 给仓库授权
   #chown -R apache.apache /etc/svn/SVNRepository
   #chmod 770 /etc/svn/SVNRepository             
   #chmod -R g+w /etc/svn/SVNRepository

10,用Apache管理用户权限:
首先需要创建一个用户文件
htpasswd etc/svn/passwordfile username
如果 passwordfile 不存在,可以加上 -c 选项让 htpasswd 新建一个。创建好的文件内容是用户名加上密码的 MD5 密文。
接下来修改 httpd.conf,在 Location 标签中加入如下内容:

先修改版本库的权限:
User daemon
Group daemon
//把上述内容改成:
User apache
Group apache
整合apache svn:

Dav svn
SVNPath /etc/svn/SVNRepository
AuthType Basic
AuthName "svn SVNRepository"
AuthUserFile /etc/svn/passwordfile
AuthzSVNAccessFile /etc/svn/SVNRepository/conf/authz
require valid-user
SSLRequireSSL


11,改svn权限策略控制文件
vi /etc/svn/SVNRepository/conf/authz

12,修改SVN用户文件
(一行一个用户,前面用户名,后面密码):
vi /etc/svn/SVNRepository/conf/passwd

13,修改svn服务器端配置文件
vi /etc/svn/repos/conf/svnserve.conf

14,启动SVN服务器端(如果只使用Https访问,则不需要启动SVN,启动Apache就可以了)
/usr/local/svn/subversion/bin/svnserve -d -r /usr/local/svn_repository/
如果要指定端口号,则加上--listen-port 21,21是指定的端口号

15,设置ssl访问(生成证书)
cd /usr/local/apache2/conf
openssl genrsa -des3 -out ca.key 1024
//按提示输入密码:****
chmod 400 ca.key
//生成证书
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt
//按提示分别输入如下内容:
//Country Name: CN
//State or Province Name: ShangHai
//Locality Name: ShangHai
//Organization Name:
//Organizational Unit Name:
//Common Name:
//Email Address: your email
chmod 400 ca.crt
openssl genrsa -des3 -out server.key 1024
//按提示输入密码:
chmod 400 server.key
openssl req -new -key server.key -out server.csr
//按提示分别输入如下内容:
//Country Name: CN
//State or Province Name: Shanghai
//Locality Name: Shanghai
//Organization Name:
//Organizational Unit Name:
//Common Name:
//Email Address: your email
(ca.crt 和server.csr 的Common Name不能一样)
openssl req -noout -text -in server.csr
sh sign.sh server.csr
chmod 400 server.crt
vi /usr/local/apache2/conf/httpd.conf
取消Include conf/extra/httpd-ssl.conf前的注释#
启动apache
/usr/local/apache2/bin/apachectl start
输入密码****

16,配置在linux下apache自动启动的标准脚本

17,为SVN加入Email通知
可以通过Subversion的Hook脚本的方式为SVN加入邮件列表功能
编译安装了Subversion后 在源码的tools 下有一个comm-email.pl的Perl脚本,在你的档案目录下有一个hooks目录,进入到hooks目录把post-commit.tmpl 改名为post-commit并给它可执行的权限。
更改post-commit脚本 把comm-email.pl脚本的决对路径加上,否则 SVN找不到comm-email.pl
解决乱码问题:
my @difflines; (行487) 的前面加上:
for (my $i=0; $i<@body; ++$i){
   my @rsa = split( /\?\\/, $body[$i] );
   $body[$i] = "";
   foreach my $val (@rsa) {
       $val =~ /(^[0-9]{3})(.*)/;
       if(defined $1 and $1 gt 0){
           #print "\n[".$1 . "," . $2."]";
           $body[$i] .= chr($1) . $2;
       }
       else{
           $body[$i] .= $val;
       }
   }
}
REPOS="$1"
REV="$2"
/usr/local/svn/SVNRepository/commit-email.pl "$REPOS" "$REV" email@address1.com email@address2.com
#log-commit.py --repository "$REPOS" --revision "$REV"
**注意运行权限问题(注意commit-email.pl 中需要配置发送mail的方式,建议使用sendmail,SMTP方式邮件格式不正确。post-commit其实就是一个钩子脚本文件,需要的信息就是$1 $2,可以自己实现这个文件。)

18,备份
#!/bin/bash
SRCPATH=/home/svn/SVNRepository/; #定义仓库parent路径
DISTPATH=/home/backup/svn/`date +%m%d`/ ; #定义存放路径;
if [ -d "$DISTPATH" ]
then
  echo "aaaaa"
else
   mkdir $DISTPATH
   chmod g+s $DISTPATH
fi
echo $DISTPATH
svnadmin hotcopy $SRCPATH/Project1 $DISTPATH/Project1 >/home/backup/svn/cpreport.log 2>&1;


/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*


1.需要两个文件,httpd和subversion. httpd是web服务器,用来通过web访问subversion。

2.新建一个用户:svnroot
最好不要让root用户参与到svn的权限管理和日常的运行和维护工作中来,但是下面的一些安装和配置操作还是 需要root用户来完成的,因为有些操作只有root才能做。权限问题很重要。曾经因为权限问题折腾了一天。

3.编译安装httpd (root用户操作):

//解压apache2安装包
# tar xvzf httpd-2.2.11.tar.gz
//进入解压后的目录
# cd httpd-2.2.11
//配置apache安装,前两个参数是必须要加的,你还可以根据您的需要添加其他的参数。
//后面的参数制定你要把apache安装哪里
# ./configure --enable-dav --enable-so --prefix=/usr/local/apache2/
# make
//安装
# make install

4.安装Subversion

//解压SubVersion安装包 (root用户进行下面的操作)
# tar xvzf Subversion-1.6.2.tar.gz

# tar xzvf subversion-deps-1.6.2.tar.gz(解压后的内容会自动到Subversion-1.6.2目录中)

(tar xjf *.tar.bz2)
//进入解压后的目录
# cd Subversion-1.6.2
//配置subversion安装
#./configure --with-apxs=/usr/local/apache2/bin/apxs --prefix=/usr/local/subversion
--with-apr=/usr/local/apache2 --with-apr-util=/usr/local/apache2 --with-ssl --enable-maintainer-mode
# make
//安装
# make install
//创建库文件所在的目录 (svnroot用户进行下面的操作)
# mkdir /home/svnroot/repository
//进入subversion的bin目录
# cd /usr/local/subversion/bin
//创建仓库"test"
# ./svnadmin create /home/svnroot/repository/test
# cd /home/svnroot/repository/test
//看看是不是多了些文件,如果是则说明Subversion安装成功了
# ls –l
# cd /usr/local/subversion/bin
//这条语句将把路径/home/user/import下找到的文件导入到你创建的Subversion 仓库中去,
//提交后的修订版为1。
# ./svn import /home/user/import file:///home/svnroot/repository/test –m "注释"
//不让其他人有该目录的权限
# chmod 700 /home/svnroot/repository





阅读(1906) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~