[root@localhost ~]# mkdir /opt/svn
[root@localhost ~]# cd /opt/svn
[root@localhost svn]# svnadmin create test //建立一个新的版本库test
[root@localhost svn]# ls
test
[root@localhost svn]# ls test
conf dav db format hooks locks README.txt
conf--存放权限配置
dav--提供给apache和mod_dav_svn存储内部数据
db--所有版本控制的数据文件
format--文本文件,内容为一个整数,表示当前文件库的版本号
hook--放置hook脚本文件
locks--存放subversion文件库锁定数据,用来追踪存取文件库的客户端
#这里有个db目录,其中的每个文件是以版本号命名的(文件名为:0,1,2,3...)。0文件记录版本号为0时svn中的数据的状态,版本号1就记录与版本号0相比,文件和目录修改的情况。每个文件都是记录当前版本与上一个版本相比较所不同的情况。而且这些文件是以特殊的形式存储,并不是以普通文件格式存在。
[root@localhost svn]# ls test/conf
authz passwd svnserve.conf //conf目录下的三个最主要的配置文本文件
authz--权限配置文件
passwd--用户名口令文件
svnserve.conf--svn服务配置文件
配置svnserve.conf文件
[root@localhost conf]# vim svnserve.conf #文件中非注释行要顶格写,否则会出错
[general] #该文件仅由一个[general]配置段组成
anon-access = none #anon-access 控制非鉴权用户访问版本库的权限。取值范围为"write"、"read"和"none"。
#即"write"为可读可写,"read"为只读,"none"表示无访问权限。
auth-access = write #控制鉴权用户访问版本库的权限。取值范围为"write"、"read"和"none"。
password-db = passwd #指定用户名口令文件名。除非指定绝对路径,否则文件位置为相对conf,目录的相对路径。
authz-db = authz #指定权限配置文件名,通过该文件可以实现以路径为基础的访问控制。除非指定绝对路径,
#否则文件位置为相对conf目录的相对路径。
realm = test #指定版本库的认证域,即在登录时提示的认证域名称。若两个版本库的认证域相同,建议使用相同的用户名口令数据文件。
配置允许访问的用户
[root@localhost conf]# vim passwd
[users] #该文件仅由一个[users]配置段组成
test1 = 123456 #用户名和口令设置,用户名test,口令123456
test2 = 123456
配置用户访问权限
[root@localhost conf]# vim authz
[groups]
test = test1,test2 #定义了一个用户组test,该用户组包含两个用户, 1个用户组可以包含1个或多个用户,用户间以逗号分隔。
[test:/] #版本库"test"中路径"
@test = rw #只有用户组"test"有读写权限,其他用户只有可读权限, @<用户名> = <权限>
* = #禁止其他用户访问
启动svn服务
[root@localhost conf]# svnserve –d –r /opt/svn/test
[root@localhost conf]# netstat –ntlp //检测服务是否开启,查看3960端口是否开启
此时一个简单的svn服务器已经配置好了。在/opt/svn/test/conf/目录下的三个文件保存后就会立即生效,不需要重启svnserve服务。但这三个文件只对svnserve服务有效,即客户端只能通过前缀为svn://或svn+ssh://的URL才能访问版本库。
二.基于apache的svn服务器配置
在 Subversion 和 Apache 中可以使用相同的授权文件authz,但无法使用相同的 passwd 文件,因为 Apache 是以加密方式存储密码,而 Subversion 使用明文储存密码,所以/opt/svn/test/conf/passwd文件只对subversion有用。利用apache与subversion通信,需要用到两个模块mod_dav和mod_dav_svn,确定/etc/httpd/modules/目录下有mod_dav_svn.so和mod_authz_svn.so模块,
在/etc/httpd/conf/httpd.conf文件中:
找到以下两句取消注释:
#LoadModule dav_fs_module modules/mod_dav_fs.so
#LoadModule dav_module modules/mod_dav.so
并增加以下两句
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
在文件最后添加以下几行:
DAV svn #引用远程访问模块
SVNParentPath /opt/svn/ #版本库路径
AuthType Basic #认证类型为基本认证
AuthName "Subversion repository" # 认证名称 , 将在 IE 界面弹出一个对话框 , 其标题就是Subversion repository
AuthUserFile /opt/svn/passwd #用户认证文件路径
AuthzSVNAccessFile /opt/svn/auth.conf #用户访问授权文件路径
Require valid-user #要求验证用户,不能匿名访问
</Location>
这里是在/etc/httpd/conf/httpd.conf文件中修改的,但也可以不修改该文件,而是修改/etc/httpd/conf.d/subversion.conf文件,配置方法和httpd.conf一样。
完成以上配置,创建用户认证文件和授权文件:
[root@localhost conf]# cp authz /opt/svn/auth.conf -p
/opt/svn/auth.conf是通过apache访问svn要用到的认证文件,配置和上面一样。
passwd文件需要通过命令来创建:
[root@localhost conf]# htpasswd -cm /opt/svn/passwd test1 #创建用户文件命令;第一次生成该文件使用,-m使用md5加密方法
New password: #输入密码,不会显示
Re_type new password: #重复输入密码
Adding password for user tset1 #添加用户密码成功
[root@localhost conf]# htpasswd -m /opt/svn/passwd #第二次创建用户命令
全部配置完后,重启apache服务:
[root@localhost conf]# service httpd restart
停止 httpd: [确定]
启动 httpd: [确定]
在客户端就可通过前缀为http://的URL来访问svn服务器了。
三.基于apache的svn服务器配置 ,使用mysql实现用户认证
之前的用户认证信息都是通过文件的形式存放,使用mysql可以更加安全的保护用户信息。
apache要与mysql通信需要mod_auth_mysql.so模块,确保/etc/httpd/modules/目录下存在该模块
配置/etc/httpd/conf/httpd.conf或/etc/httpd/conf.d/subversion.conf文件:
#若/etc/httpd/conf.d/auth_mysql.conf中没有以下一行,则添加
LoadModule mysql_auth_module modules/mod_auth_mysql.so
#修改文件最后刚添加的几行:
<Location /svn/>
DAV svn #引用远程访问模块
SVNParentPath /opt/svn/ #版本库路径
AuthType Basic #认证类型为基本认证
AuthName "Subversion repository" # 认证名称 , 将在 IE 界面弹出一个对话框 , 其标题就是Subversion repository
AuthzSVNAccessFile /opt/svn/auth.conf #用户访问授权文件路径
Require valid-user #要求验证用户,不能匿名访问
AuthMYSQLEnable on #使用mysql
AuthMYSQLUser root #访问mysql的用户名root
AuthMYSQLDB svn #用于用户验证的数据库名为svn
AuthMYSQLUserTable users #用户验证的数据库表名为users
AuthMYSQLNameField user_name #数据库表中的用户名字段
AuthMYSQLPasswordField user_passwd #数据库表中的密码字段
</Location>
授权文件的配置按照之前的就可以了。下面就是启动mysql数据库,创建用户名和密码:
[root@localhost ~]# service mysqld start
初始化 MySQL 数据库: [ 确定]
启动 MySQL : [ 确定 ]
[root@localhost ~]# mysql -u root -p #以root用户登陆mysql,初始不用密码
mysql> create database svn; #创建数据库svn
mysql> use svn #进入svn数据库
mysql> create table users( user_name char(30) not null, user_passwd char(30) not null, primary key (user_name) ); #创建表users
mysql> grant select on svn.users to root@localhost identified by 'passwd'; #修改数据库权限
mysql> flush privileges; #使权限生效
mysql> insert into users values ('test1',encrypt('123456')); #创建用户test1
mysql> insert into users values ('test2',encrypt('123456')); #创建用户test2
mysql> \q #退出
按照以上配置完成后,重启mysqld和httpd服务:
[root@localhost ~]# service mysqld restart
[root@localhost ~]# service httpd restart
在客户端就可以使用在数据库中创建的用户来访问svn服务器,以前缀为http://的URL。
这里只是简单的配置svn服务器,没有实现ssl加密。