SVN 1.6的與Apache HTTP Server的集成

Apache HTTP Server安裝與SVN集成配置

 

1.1 Apache HTTP Server下載地址

Apache HTTP Server (httpd) 2.2.15 is the best available version

http://httpd.apache.org/download.cgi

Download httpd-2.2.15.tar.gz

1.2 Apache HTTP Server安裝

1.2.1 上傳解壓

svn用戶上傳安裝包httpd-2.2.15.tar.gz/opt/svn/software/Apache目錄下。

       [svn@testbed1 Apache]$ tar xvzf httpd-2.2.15.tar.gz

1.2.2 編譯配置

$ ./configure --enable-dav --enable-so --prefix=/opt/svn/apache2/

1.2.3 編譯

       $ make

1.2.4 安裝

       $ make install

1.2.5 配置

接着,通過修改PREFIX/conf/下的配置文件,來配置Apache HTTP服務器。

$ vi PREFIX/conf/httpd.conf

       修改監聽端口號 Listen IP:8008

1.2.6 測試

       啓動Apache HTTP服務器:

       $ PREFIX/bin/apachectl start

       $ PREFIX/bin/apachectl stop

       現在,可以請求Apache HTTP Server的第一個網頁了http://IP:8008/,這個網頁位於DocumentRoot目錄下,通常是PREFIX/htdocs/

 

1.3 SVNApache HTTP Server結合

      

        通過 HTTP 協議訪問版本庫是 Subversion 的亮點之一。使用 Http 協議意味着只需要打開瀏覽器,輸入 URL 即可輕鬆的瀏覽整個版本庫。由於 Subversion 需要版本化的控制,因此標準的 Http 協議不能滿足需求。要讓 Apache Subversion 協同工作,需要使用 WebDAVWeb 分佈式創作和版本控制)。WebDAV HTTP 1.1 的擴展,關於 WebDAV 的規範和工作原理,可以參考 IETF RFC 2518

 

       爲了使 Subversion dav 模塊通信,需要安裝 mod_dav_svn 插件,即mod_dav_svn-1.6.12-1.rhel5.x86_64.rpm組件包,可以在 Subversion 的安裝目錄中找到。將其拷貝到 Apache 安裝目錄的 modules 文件夾下。接下來就是配置 Apache httpd.conf 文件,讓 Apache 在啓動的時候加載上述模塊。

 

       root用戶進入目錄,查找mod_dav_svn插件mod_dav_svn.somod_authz_svn.so

       [root@testbed1 /]# find -name mod_dav_svn.so

       ./usr/lib64/httpd/modules/mod_dav_svn.so

       [root@testbed1 /]# find -name mod_authz_svn.so

       ./usr/lib64/httpd/modules/mod_authz_svn.so

       [root@testbed1 /]# su - svn

       $cp /usr/lib64/httpd/modules/mod_dav_svn.so /opt/svn/apache2/modules/

       $cp /usr/lib64/httpd/modules/mod_authz_svn.so /opt/svn/apache2/modules/

    httpd.conf文件的最後添加如下內容:

LoadModule dav_svn_module     modules/mod_dav_svn.so

LoadModule authz_svn_module   modules/mod_authz_svn.so

<Location /repos>

      DAV svn

      SVNPath /opt/svn/svndata/repos

</Location>

     

      Location 標籤指出訪問的 URL 以及在服務器上的實際位置。配置完畢後重新啓動 Apache,打開瀏覽器,輸入 http://IP:Port/repos 將會看到SVN的管理界面。

這表示 Apache dav_svn 模塊已經可以正常工作了。用戶可以使XX用任何一種 Subversion 的客戶端通過 Http 協議訪問你的版本庫。

如果想要指定多個版本庫,可以用多個 Location 標籤,也可以使用 SVNParentPath 代替 SVNPath,例如在 /etc/svn 下有多個版本庫 repos1repos2 等等,用如下方式指定:

<Location /repos>

  DAV svn

  SVNParentPath /opt/svn/svndata

</Location>

"SVNParentPath /opt/svn/svndata" 表示/opt/svn/svndata下的每個子目錄都是一個版本庫。可以通過 http://IP:Port/repos/repos1http://IP:Port/repos/repos2 來訪問。

現在你的版本庫任何人都可以訪問,並且有完全的寫操作權限。也就是說任何人都可以匿名讀取,修改,提交,以及刪除版本庫中的內容。顯然大部分場合這是不符合需求的。那麼如何進行權限設置呢,Apache 提供了基本的權限設置。

首先需要創建一個用戶文件。Apache 提供了一個工具 htpasswd,用於生成用戶文件,可以在 Apache 的安裝目錄下找到。具體使用方法如下:

[svn@testbed1 ~]$ mkdir -p /opt/svn/conf

[svn@testbed1 ~]$ vi /opt/svn/conf/password.conf

[svn@testbed1 ~]$ /opt/svn/apache2/bin/htpasswd /opt/svn/conf/password.conf zhaiqi

New password:

Re-type new password:

Adding password for user zhaiqi

如果password.conf文件不存在,可以加上-c選項讓htpasswd新建一個,創建好的文件內容是用戶名加上密碼的 MD5 密文。

 

接下來修改 httpd.conf,在 Location 標籤中加入如下內容:

AuthType Basic

AuthName "svn repos"

AuthUserFile /opt/svn/conf/password.conf

Require valid-user

 

重新啓動 Apache 打開瀏覽器訪問版本庫。Apache 會提示你輸入用戶名和密碼來認證登陸了,現在只有password.conf文件中設定的用戶纔可以訪問版本庫。也可以配置只有特定用戶可以訪問,替換上述 "Require valid-user" "Require user user1 user2 " 將只有user1user2可以訪問該版本庫。

有的時候也許不需要這樣嚴格的訪問控制,例如大多數開源項目允許匿名的讀取操作,而只有認證用戶才允許寫操作。爲了實現更爲細緻的權限認證,可以使用 Limit

LimitExcept 標籤。例如:

<LimitExcept GET PROPFIND OPTIONS REPORT>

       require valid-user

</LimitExcept>

如上配置將使匿名用戶有讀取權限,而限制只有password.conf中配置的用戶可以使用寫操作。如果這還不能滿足你的要求,可以使用 Apache mod_authz_svn 模塊對每個目錄進行認證操作。

mod_authz_svn進行目錄訪問控制。

首先需要讓Apachemod_authz_svn模塊加載進來。在Subversion的安裝目錄中找到mod_auth_svn模塊,將其拷貝到Apache安裝目錄的modules子目錄下。修改httpd.conf 文件,找到LoadModule dav_svn_module modules/mod_dav_svn.so,在其後面加上LoadModule authz_svn_module modules/mod_authz_svn.so

現在可以在 Location 標籤中使用 authz 的功能了。一個基本的 authz 配置如下:

<Location /repos>

  DAV svn

  SVNPath /opt/svn/svndata/repos

  AuthType Basic

  AuthName "svn repos"

  AuthUserFile /opt/svn/conf/password.conf

  AuthzSVNAccessFile /opt/svn/conf/authz.conf

  Satisfy Any

  Require valid-user

</Location>

 

AuthzSVNAccessFile 指向的是 authz 的策略文件,詳細的權限控制可以在這個策略文件中指定,如:

#兩個分組:admingroup,visitorgroup,developers

[groups]

admingroup = zhaiqi,wujinkang

visitorgroup = carlos,marco

developers = jack,michel,rose,user1,user2,user3

#在根目錄下指定所有的用戶有讀權限

[/]

* = r

#追加admingroup組用戶有讀寫權限

@admingroup = rw

#branches/dev目錄下指定developers組的用戶有讀寫權限

[/branches/dev]

@developers = rw

#/tags組下給予用戶Jack讀寫權限     

[/tags]

jack = rw

#禁止所有用戶訪問/private目錄

[/private]

* =

#visitorgroup組用戶讀權限

@visitorgroup = r

 

使用SVNParentPath代替SVNPath來指定多個版本庫的父目錄時,其中所有的版本庫都將按照這個策略文件配置。例如上例中Jack將對所有版本庫裏的/tags目錄具有讀寫權限。如果要對具體每個版本庫配置,用如下的語法:

[groups]

project1_admin = user1 user2

project2_admin = jack michel rose

[repos1:/]

* = r

@ project1_admin = rw

[repos2:/]

* = r

@ project2_admin = rw

這樣項目1admin組只能對repos1版本庫下的文件具有寫權限而不能修改版本庫repos2,同樣項目2admin也不能修改repos1版本庫的文件。

   

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章