centos 7搭建svn+apache服務器及探討SVNParentPath和SVNPath的區別

1.前言

今天領導讓搭建一套svn服務器,用來存一些文檔,本覺得是很簡單的一件事情,但是過程並無那麼順利,主要是不理解SVNParentPath和SVNPath致使的問題,在通過查找文檔和調試以後,才弄清楚他們的使用和區別,因此特此記錄一下。html

2.centos 7搭建svn+apache服務器

1. 關閉selinux和防火牆

2. 安裝svn和apache和mod_dav_svn模塊

yum install httpd svn mod\_dav\_svn

3. 查看svn和apache版本,肯定安裝成功

[root@chenxz-test1 conf.d]# svn --version
svn, version 1.7.14 (r1542130)
   compiled Apr 11 2018, 02:40:28
Copyright (C) 2013 The Apache Software Foundation.
This software consists of contributions made by many people; see the NOTICE
file for more information.
Subversion is open source software, see http://subversion.apache.org/
The following repository access (RA) modules are available:
* ra_neon : Module for accessing a repository via WebDAV protocol using Neon.
  - handles 'http' scheme
  - handles 'https' scheme
* ra_svn : Module for accessing a repository using the svn network protocol.
  - with Cyrus SASL authentication
  - handles 'svn' scheme
* ra_local : Module for accessing a repository on local disk.
  - handles 'file' scheme
[root@chenxz-test1 conf.d]# httpd -v
Server version: Apache/2.4.6 (CentOS)
Server built:   Aug  8 2019 11:41:18

4. 建立倉庫

#建立倉庫目錄
[root@chenxz-test1 ~]# mkdir -p /home/data/svn
#建立svn倉庫
[root@chenxz-test1 ~]# svnadmin create /home/data/svn/testlinux

5.建立svn用戶

#建立svn用戶及密碼
[root@chenxz-test1 conf.d]# htpasswd -c /home/data/svn/passwd chenxz
New password: 
Re-type new password: 
Adding password for user chenxzapache

6.用戶權限管理

    svn用戶權限有authz文件控制,該文件由[groups]配置段和若干版本庫路徑權限段組成centos

    [groups]配置段格式:<用戶組>=<用戶列表>服務器

    用戶列表由若干個用戶組或用戶名構成,用戶組或用戶名之間用逗號","分隔,引用用戶組時要使用前綴"@"svn

    版本庫路徑權限段格式:ui

     [<版本庫名>:<路徑>]如版本庫abc路徑/tmp的版本庫路徑權限段的段名爲"[abc:/tmp]"。spa

     可省略段名中的版本庫名。若省略版本庫名,則該版本庫路徑權限段對全部版本庫中相同路徑的訪問控制都有效。如:[/tmp].net

版本庫路徑權限段中配置行格式有以下三種:
       <用戶名> = <權限>
       <用戶組> = <權限>
        * = <權限>
    其中,"*"表示任何用戶;權限的取值範圍爲''、'r'和'rw',''表示對該版本庫路徑無任何權限,'r'表示具備只讀權限,'rw'表示有讀寫權限。調試

注意:每行配置只能配置單個用戶或用戶組。

#authz文件在每一個倉庫的conf文件夾下都有,這裏是爲了統一管理用戶權限,因此從倉庫拷貝受權文件到倉庫上級目錄,
cp /home/data/svn/test/conf/authz /home/data/svn/
#在auth文件最後追加如下配置 
[/]
chenxz = rw

7.修改配置文件/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 /home/data/svn  
     AuthType Basic  
     AuthName "Authorization SVN"  
     AuthzSVNAccessFile /home/data/svn/authz  
     AuthUserFile /home/data/svn/passwd  
     Require valid-user  
</Location>

8.配置apache對SVN目錄權限

[root@chenxz-test1 ~]# chown apache.apache /home/data/svn/ -R

9.啓動apache

[root@chenxz-test1 conf.d]# systemctl start httpd

10.使用http訪問,輸入用戶名密碼後返回版本號即搭建成功

image.png

3.SVNParentPath和SVNPath的區別

百度「SVNParentPath和SVNPath的區別」基本無一例外都是下面這種說法
image.png
在svn中文網中找到mod_dav_mod,能夠看到官網對SVNParentPath和SVNPath的說明
image.png
因此二者的區別就是,SVNParentPath指定的是倉庫的上級目錄,能夠管理其配置目錄下面的全部倉庫,這樣作的好處是,只須要用一個authz文件管理用戶,並且若是你須要一個超級管理員帳戶,能夠登陸全部SVNParentPath下面的倉庫,這時在authz文件裏配置[/]便可表明全部的倉庫,並且使用SVNParentPath只須要在apache裏面配置一個location;SVNPath指定的是一個倉庫的目錄,只能管理一個倉庫,這樣作的好處是,對權限管理更加嚴格,這種狀況下的authz文件裏配置的[/]只能表明該倉庫,缺點是每增長一個倉庫,就須要在apache裏面添加一個location。下面將給出兩種配置和對應的訪問方式。

1.使用SVNParentPath時的apache配置

LoadModule dav\_svn\_module modules/mod\_dav\_svn.so  
LoadModule authz\_svn\_module modules/mod\_authz\_svn.so  
#location這裏使用倉庫的上級目錄  
<Location /svn>  
 DAV svn  
 #指向倉庫的上級目錄  
 SVNParentPath /home/data/svn  
 AuthType Basic  
 AuthName "Authorization SVN"  
 AuthzSVNAccessFile /home/data/svn/authz  
 AuthUserFile /home/data/svn/passwd  
 Require valid-user  
</Location>

訪問方式 http://ip/倉庫的上一級/倉庫名  如 http://192.168.202.128/svn/test

2.使用SVNPath時的apache配置

LoadModule dav\_svn\_module modules/mod\_dav\_svn.so  
LoadModule authz\_svn\_module modules/mod\_authz\_svn.so  
#location這裏使用倉庫目錄  
<Location /test>  
 DAV svn  
 #指向倉庫目錄  
 SVNPath /home/data/svn/test  
 AuthType Basic  
 AuthName "Authorization SVN"  
 #authz文件指向倉庫下的authz,固然指向一個統一的authz也不會出錯,可是這麼作就失去了使用SVNPath的意義  
 AuthzSVNAccessFile /home/data/svn/test/conf/authz  
 AuthUserFile /home/data/svn/passwd  
 Require valid-user  
</Location>  
#多個倉庫須要多個location  
<Location /mytest>  
 DAV svn  
 SVNPath /home/data/svn/mytest  
 AuthType Basic  
 AuthName "Authorization SVN"  
 AuthzSVNAccessFile /home/data/svn/mytest/conf/authz  
 AuthUserFile /home/data/svn/passwd  
 Require valid-user  
</Location>

訪問方式 http://ip/倉庫名  如 http://192.168.202.128/test

4.遇到的問題

出現的問題都是由於在location、SVNPath和SVNParentPath後接的目錄不對致使的,好比我像下面這麼配置

LoadModule dav\_svn\_module modules/mod\_dav\_svn.so  
LoadModule authz\_svn\_module modules/mod\_authz\_svn.so  
<Location /test>  
 DAV svn  
 SVNParentPath /home/data/svn/test  
 AuthType Basic  
 AuthName "Authorization SVN"  
 AuthzSVNAccessFile /home/data/svn/authz  
 AuthUserFile /home/data/svn/passwd  
 Require valid-user  
</Location>

就會出現下面的錯誤
1.jpg
再好比我像下面這樣配置

LoadModule dav\_svn\_module modules/mod\_dav\_svn.so  
LoadModule authz\_svn\_module modules/mod\_authz\_svn.so  
<Location /test>  
 DAV svn  
 SVNPath /home/data/svn  
 AuthType Basic  
 AuthName "Authorization SVN"  
 AuthzSVNAccessFile /home/data/svn/authz  
 AuthUserFile /home/data/svn/passwd  
 Require valid-user  
</Location>

就會出現下面的報錯
2.jpg

參考:

  1. CentOS7+Apache+SVN安裝配置,並經過HTTP方式訪問
  2. SVN+apache中SVNParentPath與SVNPath
  3. mod_dav_mod - SVN中文網
相關文章
相關標籤/搜索