SVN是Subversion的简称,是一个安全虚拟网络系统,它将系统整体的信息安全功能均衡合理地分布在不同的子系统中,使各子系统的功能得到最大限度的发挥,子系统之间互相补充,系统整体性能大于各子系统功能之和,用均衡互补的原则解决了"木桶原理"的问题。
本文刊发于《网络安全和信息化》2020年第1期
SVN能在跨接Internet、Intranet、Extranet间的网络所有端点实现全面的安全,而且还能提供基于企业策略的信息管理机制以充分有效地利用有限的带宽。SVN可以满足各种企业VPN的要求,通过为公司内部网络、远程和移动用户、分支机构和合作伙伴提供基于Internet的安全连接。所以,我们可以将SVN看成是VPN、防火墙、基于企业策略的信息管理软件集成在一起的Internet安全的综合解决方案。在这样一个网络系统中,所有互联网服务器端和客户端都是安全的,并有一个信息管理机制以不断地通过这个外部网络环境动态地分析及满足客户的特定带宽需求。
在Centos7中,我们可以很轻松地搭建SVN服务。
一、安装与配置svn
1、安装 svn
# yum -y install subversion
2、创建仓库DEV
# mkdir /opt/svn
# svnadmin create /opt/svn/DEV
3、配置用户和权限
3.1 增加用户和密码,在/opt/svn/DEV/conf已经有passwd和authz配置文件了,但是如果将来需要建立多个版本库时就不方便了,因此建议建立统一的passwd和authz配置文件。
# vi /opt/svn/passwd #修改密码文件
[users]
svndmin = 12345678
user1 = 12345678
user2 = 12345678
3.2 配置权限和用户分组
# vi /opt/svn/authz #修改权限和用户分组文件
[groups] #建立dev和admin两个分组
dev = uesr1,user2
admin = svnadmin
[/]
@dev = r
@admin = rw
* = #表示其它用户没有任何权限
[/] #对单个用户授权
user1 = rw
* =
3.3 配置svnserve.conf
# vi /opt/svn/DEV/conf/svnserve.conf
[general]
anon-access = none
auth-access = write
password-db = /opt/svn/passwd
authz-db = /opt/svn/authz
realm = DEV
3.4.启动和关闭SVN服务
启动:svnserve -d -r /opt/svn/DEV
关闭:killall svnserve
测试连接:svn co svn://localhost/DEV
测试连接时系统会提示输入用户名和密码,并下载该版本,至此使用svn协议访问的方式就安装完成。如图1。
图1
二、使用Http方式访问
1. 安装apache和openssl和相关模块
# yum install httpd httpd_devel mod_dav_svn mod_ssl openssl mod_auth_mysql
确认安装如下模块:
# ls /etc/httpd/modules/|grep svn
会显示以下内容:
mod_authz_svn.so
mod_dav_svn.so
2. 新增http的验证用户
创建http的用户和密码文件,增加用户两个用户
# htpasswd -c /opt/svn/svn_http_passwd svnadmin #增加用户svnadmin
根据提示输入密码并确认密码。
# htpasswd /opt/svn/svn_http_passwd user1 #增加用户user1,密码设置同上。
注意第一次增加用户需要用到参数-c,后面再增加用户一定不要到参数-c,否则会把以前的用户全删除。还需要注意的是:/opt/svn/svn_http_passwd不应该与svn共同使用一个用户文件,原因是httpd与svn用户都是单独的,前者会对用户文件中的密码进行加密,后者则不会加密。authz文件是可以共用的。
# cat /opt/svn/svn_http_passwd #可查看文件内容
3.配置访问的虚拟主机
# vi /etc/httpd/conf.d/subversion.conf
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
<Location /svn>
DAV svn
SVNParentPath /opt/svn/
SVNListParentPath on
AuthType Basic
AuthName "Authorization Realm"
AuthUserFile /opt/svn/svn_http_passwd
AuthzSVNAccessFile /opt/svn/authz
Require valid-user
</Location>
4.重启httpd服务,并进行访问
# service httpd restart
重启动用就可以用地址进行访问,http://IP/svn/DEV 如:http://192.168.1.18/svn/DEV
三、使用https方式访问
制作安全证书,得到证书和私钥,修改 /etc/httpd/conf.d/ssl.conf和/etc/httpd/conf.d/subversion.conf两个文件。
# vi /etc/httpd/conf.d/ssl.conf
#SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateFile /etc/httpd/ssl/httpd.crt
#SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
SSLCertificateKeyFile /etc/httpd/ssl/httpd.key
# vi /etc/httpd/conf.d/subversion.conf
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
<Location /svn>
DAV svn
SVNParentPath /opt/svn/
SVNListParentPath on
AuthType Basic
AuthName "Authorization Realm"
AuthUserFile /opt/svn/svn_http_passwd
AuthzSVNAccessFile /opt/svn/authz
Require valid-user
SSLRequireSSL
</Location>
重启httpd服务,就可以使用https的方法访问到SVN了。