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