close_two

导航

centos7搭建svn;Apache访问svn仓库

2018-05-21

一.centos7安装subversion

1 yum -y install subversion
2 svn --version

 

二.创建仓库

1 cd /home
2 mkdir svn
3 svnadmin create /home/svn/myproject

三.修改配置文件 参考:http://www.linuxfly.org/post/449/

成功创建的仓库目录下会有这几个文件或目录:

conf  db  format  hooks  locks  README.txt

其中conf下面的authz passwd svnserve.conf就是我们要修改的配置文件

1.配置authz文件

注意:
* 权限配置文件中出现的用户名必须已在用户配置文件中定义。
* 对权限配置文件的修改立即生效,不必重启svn。
用户组格式:
[groups]
<用户组名> = <用户1>,<用户2>
其中,1个用户组可以包含1个或多个用户,用户间以逗号分隔。
版本库目录格式:
[<版本库>:/项目/目录]
@<用户组名> = <权限>
<用户名> = <权限>
其中,方框号内部分可以有多种写法:

/,表示根目录及以下。根目录是svnserve启动时指定的,我们指定为/home/svn。这样,/就是表示对全部版本库设置权限。
repos1:/,表示对版本库1设置权限
repos2:/occi, ,表示对版本库2中的occi项目设置权限
repos2:/occi/aaa, ,表示对版本库2中的occi项目的aaa目录设置权限
权限主体可以是用户组、用户或*,用户组在前面加@,*表示全部用户。权限可以是w、r、wr和空,空表示没有任何权限。

1 vim /home/svn/myproject/conf/authz

2.配置passwd文件

1 vim /home/svn/myproject/conf/passwd

3.配置svnserve.conf

配置项分为以下5项:

anon-access 控制非鉴权用户访问版本库的权限。取值范围为"write"、"read"和"none"。
即"write"为可读可写,"read"为只读,"none"表示无访问权限。
缺省值:read

auth-access 控制鉴权用户访问版本库的权限。取值范围为"write"、"read"和"none"。
即"write"为可读可写,"read"为只读,"none"表示无访问权限。
缺省值:write


password-db 指定用户名口令文件名。除非指定绝对路径,否则文件位置为相对conf
目录的相对路径。
缺省值:passwd

authz-db 指定权限配置文件名,通过该文件可以实现以路径为基础的访问控制。
除非指定绝对路径,否则文件位置为相对conf目录的相对路径。
缺省值:authz

realm 指定版本库的认证域,即在登录时提示的认证域名称。若两个版本库的
认证域相同,建议使用相同的用户名口令数据文件。
缺省值:一个UUID(Universal Unique IDentifier,全局唯一标示)

1 vim /home/svn/myproject/svnserve.conf

四.启动svnserve服务

1 svnserve -d -r /home/svn/myproject

五.查看服务进程

 

1 netstat -ntlp

 

六.Windows下svn客户端访问

 

svn://ip/

注意:因为启动svnserve时指定了/home/svn/myproject为根目录,故访问svn://ip/就是myproject仓库

输入用户名admin密码admin

测试一下svn commit

 

以上svn客户端访问。以下搭建Apache访问svn

一.centos7下安装Apache并配置运行

1 yum -y install httpd
2 vim /etc/httpd/conf/httpd.conf
3 systemctl start httpd.service

 

二.mod_dav_svn安装

1 yum install mod_dav_svn

 三.创建版本库

由于之前已经创建了/home/svn/myproject。现在只需要让Apache用户拥有改仓库权限即可。这里给Apache授权可更改svn目录

1 cd /home
2 chown -R apache.apache svn/

四.配置subversion.conf

安装mod_dav_svn模块就会生成subversion.conf这个文件,这里更改配置让Apache访问subversion版本库

1 vim /etc/httpd/conf.d/subversion.conf

 

#需要激活Apache加载mod_dav_svn模块

 LoadModule dav_svn_module     modules/mod_dav_svn.so
 LoadModule authz_svn_module   modules/mod_authz_svn.so

<location /svn>  该/svn是虚拟节点。即访问http://ip/svn/ 相当于访问SVNpath目录

SVNPath /home/svn/myproject  #svn仓库路径
##SVNParentPath /home/svn #svn仓库父路径,例如/home/svn下有多个版本库myproject1,myproject2等,可以用父目录代替

AuthType Basic # 使用基本认证方式,即用户名、密码认证

AuthName "myproject svn" # 在认证对话框中出现的提示信息

AuthUserFile /home/svnrepo/myproject/conf/http_passwd# 指定存放用户名信息的文件路径,这里是http用户信息跟svn客户端分开认证

AuthzSVNAccessFile /home/svnrepo/myproject/conf/authz # 指定存放用户访问路径信息的文件路径,这里跟svn客户端共用一个authz

Require valid-user # 限定只有用户输入正确的用户名和密码后才能访问该标签所指向的路径

五.认证选项
1、基本 HTTP 认证
最简单的客户端认证方式是通过 HTTP 基本认证机制,简单的使用用户名和密码来验证一个用户的身份。Apache提供了一个 htpasswd 工具来管理一个用户文件,这个文件包含用户名和加密后的密码,这些就是你希望赋予 Subversion 特别权限的用户。htpasswd 可以在 Apache 的 bin 安装目录下找到。具体使用方法如下:

创建用户文件:
htpasswd -c /etc/svn/passwordfile username

添加新用户(-m 表示以MD5加密密码):
htpasswd [-m] /etc/svn/passwordfile Newusername

更改用户密码:
htpasswd [-m] /etc/svn/passwordfile username

删除用户(要用大写的 D ):
htpasswd –D /etc/svn/passwordfile username

#htpasswd -c /home/svn/myproject/conf/http_passwd admin
New password:  
Re-type new password:  
Adding password for user admin

六.启动httpd

1 /bin/systemctl restart httpd.service
2 netstat -ntlp

七.浏览器输入http://ip/svn/访问成功

 

 

特别注意:关于subversion配置。 其中SVNPath /home/svn/myproject 作为单个仓库的目录,访问时只需http://ip/svn/就可以
       SVNParentPath /home/svn/作为仓库父目录,svn下有多个版本库时,需要访问http/ip/svn/myproject才可以。

第一次配置一直访问不了报403.就是这个父目录权限没搞清楚

参考:https://www.cnblogs.com/zhangqifeng/archive/2009/10/21/1587694.html
使用 SVNParentPath 代替 SVNPath 来指定多个版本库的父目录时,其中所有的版本库都将按照这个策略文件配置。例如上例中 tony 将对所有版本库里的 /tags 目录具有读写权限。如果要对具体每个版本库配置,用如下的语法:

[groups]
project1_committers = paulex, richard
project2_committers = jimmy, michel, spark, tony, Robert

[repos1:/]
* = r
@ project1_committer = rw

[repos2:/]
* = r
@ project2_committer = rw

这样 repos1的 project1_committer 组只能对 repos1 版本库下的文件具有写权限而不能修改版本库 repos2 ,同样 repos2 的 project2_commiter 组也不能修改 repos1 版本库的文件。

 

posted on 2018-05-21 18:35  close_two  阅读(1323)  评论(0编辑  收藏  举报