您的位置:首页 > 运维架构 > Apache

linux+svn+apache+ssl+ftp配置安全易于管理的svn服务器

2010-06-08 09:24 836 查看
1.准备工作
所有程序包都放在/usr/yxw/source/下
下载linux操作系统下的相关程序包:httpd-2.2.15.tar.gz、openssl-0.9.8b.tar.gz、subversion-1.6.11.tar.gz、subversion-deps-1.6.11.tar.gz、vsftpd-2.2.2.tar.gz,都可以很方便的在网上找到。
最好是先装apache在装svn,这样svn的安装程序就会自动修改apache的配置文件与之集成。其他软件没有先后之分。
2.安装apache服务器
tar -zxvf httpd-2.2.15.tar.gz
cd httpd-2.2.15
./configure --prefix=/usr/local/apache2 --enable-so --enable-dav=shared --enable-dav-fs=shared --enable-dav- lock=shared --enable-ssl=shared
make&make install
安装完成后通过命令/usr/local/apache2/bin/httpd -k start|stop|restart来启动,停止和重启服务器。
通过http://ip/访问,显示it works表示安装成功。

3.安装svn
tar -zxvf subversion-1.6.11.tar.gz
tar -zxvf subversion-deps-1.6.11.tar.gz(会自动解压到subversion-1.6.11目录)
cd subversion-1.6.11
./configure -without-berkeley-db -with-zlib=/usr/yxw/source/subversion-1.6.11/zlib --prefix=/usr/yxw/httpsvn --with-apxs=/usr/local/apache2/bin/apxs --with-ssl
make&make install
安装结束后,执行/usr/yxw/httpsvn/bin/svn --verison,返回版本信息说明安装成功

此时查看apache的配置文件httpd.conf:
正常安装下

LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule dav_lock_module modules/mod_dav_lock.so
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
LoadModule ssl_module modules/mod_ssl.so

这几个module保证不是被注释的
则表明svn成功与apache集成。其实后台做了两个操作:首先svn的安装程序根据配置将相应的so文件(源码路径/subversion/mod_authz_svn/.libs/mod_authz_svn.so,源码路径/subversion/mod_dav_svn/.libs/mod_dav_svn.so )复制到apache的modules目录中,然后修改httpd.conf配置文件,添加如下两行:
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
以后除了创建、删除版本库以外的功能都是直接通过模块完成,无需通过svn程序完成。
通过“svnadmin create /data/svndata/repos1”来创建版本库repos1,此前需要创建/data/svndata/repos1目录,然后直接使用TortoiseSVN等客户端来给版本库添加项目资源test

为了能通过apache访问到这个版本库,还需要修改httpd.conf,添加如下配置:
<Location /svn>
DAV svn
#SVNPath /data/svndata/repos1/#直接指定版本库的完整路径,这个配置只应用于单一的版本库,不同的版本库需要有不同的<Location>配置
SVNParentPath /data/svndata/#指定版本库的直接父目录,用于配置多版本库的情况。即在此目录下的所有版本库公用此配置
</Location>
修改完配置后保存文件,然后重启apache服务器,访问http://ip/svn/repos1(对应SVNParentPath的配置),http://ip/svn(对应SVNPath的配置)。注意这两个的区别。
如果无法访问,可能是启动apache进程的用户没有权限访问/data/svndata/repos1/目录,修改相应权限即可。更好的做法是为svn服务单独配置一个用户,然后将svn版本库数据所在的目录权限赋予该用户。启动apache进程时也通过该用户。
httpd.conf文件中的以下内容即用来指定启动apache的用户。
User daemon
Group daemon

接下来需要加入用户认证机制及其权限控制。
1. 修改httpd.conf
<Location /svn>
DAV svn
SVNParentPath /data/svndata/
AuthType Basic
AuthName "svn project"
AuthUserFile /data/svndata/userdata/svn-auth-file#存放用户名以及密码,由htpasswd工具进行管理,此文件的改动无需重启apache
AuthzSVNAccessFile /data/svndata/userdata/authz#存放svn版本库访问权限规则,通过模块mod_authz_svn.so完成验证,可以配置到版本库中目录的访问权限,此文件的改动无需重启apache
Require valid-user
</Location>
2.添加用户
htpasswd -cd /data/svndata/userdata/svn-auth-file yuxiaowei yuxiaowei(第一个用户需要带c参数)
3.添加访问权限
vi /data/svndata/userdata/authz
[groups]
# harry_and_sally = harry,sally
admin = yuxiaowei

[repos1:/]
@admin = rw

4.保存所有修改过的文件,重启apache服务。访问http://ip/svn/repos1,会弹出验证对话框,输入之前设置的用户名密码,即可进入。如无法正常进入,请仔细检查配置文件以及以上的几个步骤。

加入ssl,增加数据的安全性
下载openssl-0.9.8b.tar.gz,安装过程如下:
./configure
make &make install
安装结束后,要使用它生成数字证书。

第一步,创建key和request:
openssl req -new > new.cert.csr

第二步,从key中删除passphrase(可选,不执行这步以后每次启动apache都需要输入刚才的那个密码,无法使用脚本自动启动):
openssl rsa -in privkey.pem -out new.cert.key

第三步,把request转换成signed sert:
openssl x509 -in new.cert.csr -out new.cert.cert -req -signkey new.cert.key -days 1825

第四步,把cert和key文件拷贝到适当的位置:
cp new.cert.cert /usr/local/apache/conf/server.crt
cp new.cert.key /usr/local/apache/conf/server.key

数字证书有了,接下来就要修改apache的配置使其支持https。
打开include行的注释。
# Secure (SSL/TLS) connections
Include conf/extra/httpd-ssl.conf

修改<Location>
<Location /svn>
DAV svn
SSLRequireSSL
SVNParentPath /data/svndata/
AuthType Basic
AuthName "svn project"
AuthUserFile /data/svndata/userdata/svn-auth-file
AuthzSVNAccessFile /data/svndata/userdata/authz
Require valid-user
</Location>

重启apache,访问https://ip/svn/repos1,选择信任该站点继续访问即可

至此,svn+apache的集成环境已经搭建完成了。若要修改apache的配置文件一般都是要重启服务的,而其他如用户文件,权限文件等修改是不需要重启服务的。所以可以使用ftp服务将这个文件交由专门的负责人进行管理。为了保持稳定的apache配置文件,考虑将<Location>配置成SVNParentPath,按一定规则建立起相对稳定的目录对版本库进行分组管理,每个组由专人负责。如按平台划分symbian,java..

(注意事项:htpasswd是apache专用的用户验证工具,不同平台下此工具的默认值获取会有所不同。如在windows平台默认是要MD5加密的,而linux平台的默认是明文存储的。同一个配置文件中的存储规则要一致,否则将无法正确读取数据而验证失效,即要么都明文存储,要么都加密存储,否则会出问题。)

搭建ftp服务器:

tar -zxvf vsftpd-2.2.2.tar.gz
cd vsftpd-2.2.2
useradd nobody#vsftp需要使用这个用户
mkdir /usr/share/empty #这一步同上。服务器需要一个empty的空目录放在/usr/share/下
#如果需要开启匿名用户访问,需要做下面几步工作
mkdir /var/ftp/ #创建供匿名用户使用的目录
mkdir /usr/local/man/man5
mkdir /usr/local/man/man8

useradd -d /var/ftp ftp
chown root.root /var/ftp
chmod og-w /var/ftp
make &make install
cp vsftpd.conf /etc/
cp RedHat/vsftpd.pam /etc/pam.d/ftp #拷贝PAM安全验证文件此为验证文件所在的目录

useradd -d /home/vsftpd/ vsftpd
chmod 700 //home/vsftpd/

现在安装已经结束,下面就要进行相关的设置。
vi /etc/vsftpd.conf

anonymous_enable=NO#关闭匿名登录
anon_root=/var/ftp
local_enable=YES#允许本地用户登录,配置虚拟用户必须允许本地用户登录
write_enable=YES
local_umask=022

chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list#当chroot_local_user为yes,此列表为可以访问该用户根目录以外的目录。否则,此列表为不可以访问该用户根目录以外的目录

listen=YES#以独立服务器运行
listen_port=3327

guest_enable=YES#起用虚拟用户
guest_username=vsftpd#映射到本地用户vsftpd
virtual_use_local_privs=YES
pasv_enable=YES
anon_world_readable_only=NO
user_config_dir=/etc/vsftpd_user_conf#虚拟用户权限配置文件所在目录。每个虚拟用户以其用户名为文件名保存权限规则。
pam_service_name=vsftp#对应/etc/pam.d/vsftp文件,指定用户pam验证时的用户名密码文件路径
######################################################
建立logins.txt
vi /tmp/logins.txt
添加入下信息:
longlei------------用户名
longlei------------密码
zhangweibo
zhangweibo
jinhui
jinhui
lxp
lxp
db_load –T –t hash –f /tmp/logins.txt /etc/vsftpd_login.db
chmod 600 /etc/vsftpd_login.db
#############################
vi /etc/pam.d/vsftp
auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd_login
################################
vi /etc/vsftpd_user_conf/longlei
local_root=/data/svndata/repos1
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
###############
启动ftp服务器:
/usr/local/sbin/vsftpd /etc/vsftpd.conf

在浏览器地址栏输入:ftp://ip:port/,然后输入用户名密码即可看到/data/svndata/repos1目录下的所有数据了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: