Subversion權限設定範例說明

網友因為剛由CVS轉換到Subversion,詢問了些關於權限控管上的問題:

  1. CVSNT的使用者可以透過WinCVS去更改自已的密碼,那Subversion呢?
  2. CVSNT的使用者可以透過WinCVS去建立檔案庫,那Subversion呢?CVSNT在權限的管理上可以對檔案庫,檔案庫內的模組,賦予不同的權限,那Subversion呢?
  3. 搭配Apache在httpd.conf中的設定不是會越長越大?
  4. CVSNT在多檔案庫的管理上相當直接,而Subversion在這就統一管理,也賦予專案內每一個模組同一個版號。

為了方便有相同疑問的朋友們參考,我藉由本篇文章說明我們平日使用的建置來回答部份問題。

為了能在公司網路內外都能存取到Subversion,我們建立了兩組設定,一組是內部網路使用的AD帳號(北中南都能使用),另一組是Apache Web Server的帳號,提供給大陸分公司與公司外的連線。當然這兩組URL存取到的是同一個檔案庫。

AD帳號的管理與密碼變更等都透過一般的AD功能就可處理,因此可以自行修改密碼,而帳號的格式是 Domain\使用者代碼,以 http://SVN主機/svn/路徑 的URL存取,其中/svn是你的檔案庫根目錄。

另一組使用Apache Web Server的帳號,就必須由管理員在主機上建立,再以svnpassword.exe建立加密密碼。為了和AD帳號使用的URL區別,使用的URL是 http://SVN主機/svnpub/路徑

在Apache的設定檔httpd.conf裡必須設定/svn與/svnpub兩組設定:

## 存取權限要寫在最後一行的svnaccess.ad裡

  DAV svn
  SVNPath D:\svn
    AuthType SSPI
    AuthName "Subversion repository"
    Require valid-user
    SSPIAuth On           #turn that authentication on
    SSPIAuthoritative On  #turn that authentication on
    SSPIDomain 
    SSPIOfferBasic On #let non-IE clients authenticate

    AuthzSVNAccessFile "C:\Program Files\Apache Group\Apache2\passwd\svnaccess.ad"

## Apache的帳號存於password檔案裡(AuthUserFile)
## 透過/svnpub連線的權限設定存於svnaccess.pub裡(AuthzSVNAccessFile)

  DAV svn
  SVNPath D:\svn
  AuthType Basic
  AuthName "Subversion repository"
  AuthUserFile "C:\Program Files\Apache Group\Apache2\passwd\password"
  AuthzSVNAccessFile "C:\Program Files\Apache Group\Apache2\passwd\svnaccess.pub"
  Require valid-user
  SVNAutoversioning on

權限檔(svnaccess.ad或svnaccess.pub格式相同)的範例如下:

## 設定群組,以方便指定目錄權限
[groups]
admin = admin1, admin2
g_project1 = adam, brown, cathy, dennis
g_project2 = brown, cathy
g_project3 = emma, fanny, cathy

## 設定根目錄權限,只有admin群組有讀寫權限
[/]
* =
@admin = rw
@g_project1 = r
@g_project2 = r
@g_project3 = r

[/trunk/project1]
@g_project1 = rw

[/branches/project2]
@g_project2 = rw

以上是簡單的權限控管的範例說明,建議你閱讀相關文件以取得更完整的資訊,剛巧保哥有一篇免費電子書:使用 Subversion 進行版本控制 (繁體中文版),應該有幫助。

##

您可能也會有興趣的類似文章

簡睿

服務於軟體業的資訊老兵。興趣廣泛,學習力佳,樂於分享所知所學。

您可能也會喜歡…

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *