Linux平臺下Subversion的安裝與配置(二)

 接第一篇,本篇中將着重介紹subversionhttpd結合使用時身份認證和授權相關的內容。

6.生成身份認證文件

 

身份認證文件保存用戶的用戶名和密碼,用於確定用戶身份。

 

執行以下命令來生成身份認證文件,位於/home/svnroot/repository,文件名爲pwdfile

htpasswd -m /home/svnroot/repository/pwdfile michael

New password: *******

Re-type new password: *******

 

htpasswd -cm /home/svnroot/repository/pwdfile harry

New password: *****

Re-type new password: *****

 

htpasswd -m /home/svnroot/repository/pwdfile sally

New password: *******

Re-type new password: *******

 

這樣michael, harrysally這三個用戶便被創建,其中-c表示創建身份認證文件-m則表示密碼使用md5加密。

 

最後,不要忘記將pwdfile文件的所有者改爲apache,並且將其權限設爲700

 

7.創建授權文件

 

授權文件用於確定每個用戶對特定目錄的操作權限,格式可參考版本庫下的conf/authzconf目錄下的authz文件用於svnserve的授權,與我們所使用的mod_authz_svn的授權文件具有相同的格式)。因而我們可以直接把conf下的authz複製到我們想要的/home/svnroot/repository目錄下,然後加以修改。

 

這裏我麼以給test項目分配權限說明subversion的授權機制,項目的目錄結構如下圖所示:

Repository

        |---test

        |      |---trunk

        |      |---branches

        |      |---tags

        |

        |---other projects…

 

其中,trunk表示主幹,branches則爲項目的分支,tags存放某個版本的快照。習慣上來說,大多數開發人的本地拷貝都來自truck目錄,所以每個開發人員都應有trunk目錄的讀寫權限,這樣他們才能正常的進行日常的開發;而分支目錄一般在,如某些開發人員需要大幅修改代碼以增加新功能,或者代碼進入較爲穩定的階段,開始bug去處工作等情況下使用,儘管這意味着這些代碼總是有固定的一個或幾個開發人員維護,但是基於“源代碼共同擁有”的原則,我們還是可以將其設置爲所有用戶具有讀寫權限;tags目錄則一般用於某個版本的發佈,比如當項目到達版本1834時,release1已經完成,那麼就可以將它複製到tags目錄,作爲一個快照存放,取一個好記得多的名字,比如release1(似乎應該只讓某些人有寫入權限,這樣可以防止快照被破壞,可是即使被破壞了又怎麼樣呢,不要忘了我們在使用一個版本管理軟件J)。

 

好吧,回過頭來看看我們已經在身份驗證文件中添加的用戶,現在我們有michael, harrysally三個用戶,其中michael是項目的pmharrysally則是開發人員,那麼很明顯了,我們需要建立兩個用戶組g_pmg_devmichael屬於g_pm組,harrysally則屬於g_dev組,分別授權。基於我們剛纔的分析,g_pm組和g_dev組的用戶都應該擁有對整個項目的讀寫權限,這也許太過簡單了,不過正是我們目前的項目所需要的,什麼時候需要一個複雜的授權方案,再修改authz文件也不遲。

 

根據authz文件的語法,我麼可以把上述的設置表達成這樣:(注意每個有效配置行的前面都不能有空格)

 

   [groups]                                                     //羣組設置

   g_pm = micheal                                          //某羣組裏的成員

   g_dev = harry,sally

 

   [test:/]                                                      //倉庫test的根目錄的訪問權限

   @g_pm = r                                                 //g_pm組用戶具有讀和寫權限,’@’開頭的表示羣組設置

   @g_dev = r                                                //g_dev用戶具有讀寫權限

 

   [test:/trunk]                                              //倉庫testtrunk目錄的訪問權限

   @g_pm = rw                                               //g_pm組用戶具有讀和寫權限,’@’開頭的表示羣組設置

   @g_dev = rw                                              //g_dev用戶具有讀寫權限

 

   [test:/branches]                                        //倉庫testbranches目錄下的訪問權限

   @g_pm = rw                                               //g_pm組用戶具有讀和寫權限,’@’開頭的表示羣組設置

   @g_dev = rw                                              //g_dev用戶具有讀寫權限

 

   [test:/tags]                                                //倉庫testtags目錄下的訪問權限

   @g_pm = rw                                               //g_pm組用戶具有讀和寫權限,’@’開頭的表示羣組設置

   @g_dev = rw                                              //g_dev用戶具有讀寫權限

 

 

如果需要對某個用戶授權,可以這麼寫:

   [test:/branches]                                        //倉庫testbranches目錄下的訪問權限

   sally = r                                                      //sally用戶具有讀權限

 

當然,這樣的authz文件顯得很繁瑣,而且沒有必要,但是這樣的配置在需求出現變化的時候將會很容易修改。

 

不要忘記將authz文件的所有者改爲apache,並且將其權限設爲700

 

 

8.修改Apache配置文件

 

執行vi /usr/local/apache2/conf/httpd.conf

確保以下兩行已被subversion正確添加,這樣apache才能正確加載module

LoadModule dav_svn_module     modules/mod_dav_svn.so

LoadModule authz_svn_module   modules/mod_authz_svn.so

 

Version Control with Subversion 1.4以及很多howto上提到的

LoadModule dav_module modules/mod_dav.so

我們已經在編譯httpd時鏈接進了核心中,不需要作爲共享對象加載。

 

 

接着,在httpd.conf的最後添加以下內容(不包括後面的註釋)

   <Location /svn>

   DAV svn

   SVNParentPath /home/svnroot/repository/                           //svn父目錄

 

   AuthType Basic                                                                       //客戶端認證機制

   AuthName "Subversion Repository"                                        //認證域名稱

   AuthUserFile /home/svnroot/repository/pwdfile                   //身份認證文件 

 

   AuthzSVNAccessFile /home/svnroot/repository/authz         //權限配置文件

   Satisfy Any                                                                             //先嚐試匿名訪問

   Require valid-user                                                                   //僅通過驗證的用戶可訪問版本庫

   </Location>

 

其中/svn表示一個url的模式,匹配形如http://host/svnurlSVNParentPath 指定的目錄下的所有項目都被subversion 認爲是合法的版本庫;AuthzSVNAccessFile爲授權文件 AuthType 則制定了客戶端身份認證機制,Basic表示http基本認證機制;AuthUserFile就是先前創建的密碼文件;Satisfy Any Require valid-user告訴apache所有用戶先使用匿名方式訪問版本庫,只有當訪問控制策略要求一個真實的用戶名時,apache纔會對客戶端進行身份驗證,這是使用得最多的一種授權方式。

 

最後,使用如下命令重啓apache httpd,打開瀏覽器訪問http://localhost/svn/test/這個URL便可訪問版本庫了,當然,受權限的限制,必須是合法用戶才能訪問且具有相應的權限的目錄。

/usr/local/apache2/bin/apachectl restart

 

至此,我們的版本庫已經進行了正確的身份認證和授權配置,並且用戶可以通過瀏覽器來查看當前的版本庫的情況,subversion已經處於可用的狀態。接下來的一篇中,我們將討論使用subversion客戶端相關的問題以及如何將subversion和apache httpd配置爲系統服務。

Reference

1.        Subversion之路--實現精細的目錄訪問權限控制      鄭新星

2.       Version Control with Subversion 1.4(r2730)    Ben Collins-Sussman, Brian W. Fitzpatrick, and C. Michael Pilato

3.       Apache HTTP Server Version 2.2文檔中文版   Apache Software Foundation  金步國譯

4.       Redhat9 Linux下安裝,配置Subversion 1.3.1      Wooin  http://blog.csdn.net/wooin/archive/2006/07/11/903974.aspx

 

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