天天看點

SVN伺服器之使用者權限配置——authz檔案1 《svn權限配置檔案(authz)分析》 http://blog.csdn.net/saiya_kwok/archive/2009/02/20/3914294.aspx

文章來源: 哥德巴赫猜想

本文主要是分析SVN伺服器中使用者權限的配置,作為SVN伺服器基本配置的提高篇。如果讀者還未了解SVN伺服器的基本配置,可以參見本人的另外一篇博文《使用自己的Linux svnserve伺服器》,連結:http://blog.chinaunix.net/u/33048/showart_1890997.html,本文中下面簡稱《基礎篇》。

     本文歡迎自由轉載,但請标明出處和本文連結,并保持本文的完整性。

     CU: Godbach

Blog:http://blog.chinaunix.net/u/33048/index.html

Oct 26, 2009

在實際的項目開發中,有新的成員加入進來。這就需要在SVN伺服器上為其添加一個賬戶。但是,由于某些原因,又不希望該使用者能能夠讀取伺服器上的所有檔案。這時,就需要為該賬戶設定一些權限,使之可以去SVN伺服器上取下某些特征目錄的檔案,或者不能取出某些特征目錄的檔案。如何實作呢?

在本人《基礎篇》中講到了如何配置svnserve.conf和passwd兩個檔案,而沒有講解authz檔案的配置。因為當時搭建的SVN伺服器上的所有檔案對所有使用者可見。本文要講的就是authz檔案的配置管理。該檔案就是實作了對SVN使用者的分組管理和權限設定。

1. authz 檔案分析

下面先看一下authz檔案的預設内容:

### This file is an example authorization file for svnserve.

### Its format is identical to that of mod_authz_svn authorization

### files.

### As shown below each section defines authorizations for the path and

### (optional) repository specified by the section name.

### The authorizations follow. An authorization line can refer to a

### single user, to a group of users defined in a special [groups]

### section, or to anyone using the '*' wildcard.  Each definition can

### grant read ('r') access, read-write ('rw') access, or no access

### ('').

[groups]

# harry_and_sally = harry,sally

# [/foo/bar]

# harry = rw

# * =

# [repository:/baz/fuz]

# @harry_and_sally = rw

# * = r        

    檔案内容上半部分是注釋,講解authz的相關配置方法。大緻内容就是該檔案可以對普通一個使用者、定義的一個使用者組或所有的使用者進行權限配置。其中使用者組通過在[group]這一節定義。随後在設定使用者權限的時候,定義在某使用者組的使用者則用“@使用者組名”表示,所有使用者通過'*'來表示。注意:該檔案中出現的所有使用者名都需要在passwd檔案中定義過了。

使用者的權限就分隻讀('r')、讀寫('rw')和禁止通路('')。

       這裡要補充說明的是authz檔案中對版本庫路徑的表示方法。用'[/]'來表示版本庫的根目錄,如果有子目錄foo,設定該目錄權限時用'[/foo]'即可,其他任何目錄都以'/'為版本根目錄進行表示。

2. 舉例

       在舉例之前,我們要先修改svnserve.conf檔案。《基礎篇》沒有講解authz的配置,svnserve.conf中并沒有開啟authz的驗證功能,這部分内容如下:

### The authz-db option controls the location of the authorization

### rules for path-based access control.  Unless you specify a path

### starting with a /, the file's location is relative to the the

### directory containing this file.  If you don't specify an

### authz-db, no path-based access control is done.

### Uncomment the line below to use the default authorization file.

#authz-db = authz

       是以,這裡需要先做關鍵的一步,開啟authz的驗證功能,即删除注釋符'#'即可:

       authz-db = authz

這樣,當有使用者通路版本庫的時候,就會觸發到svnserve.conf配置檔案中的這一行,進而會進到atuhz檔案中就驗證。

下面開始我們的舉例分析。假設我們在passwd定義了如下使用者:

[users]

harry = harrypasswd

sally = sallypasswd

john = johnpasswd

       版本庫根目錄下有3個子目錄,分别為foo,secret1, secret2。對于harry和sally,我們隻想讓他們對foo有讀寫權限,對secret1有隻讀權限,對secret2沒有讀寫權限,john有整個版本庫的讀寫權限,則authz檔案的配置如下:

[groups]

grp_limit = harry,sally

[/]

* = rw

[/secret1]

@grp_limit = r

[/secret2]

@grp_limit =

       簡單說明一下配置。

       我們首先定義了一個特征使用者組grp_limit用來表示harry和sally:

       [groups]

grp_limit = harry,sally

因為他們在整個版本庫的權限都是一樣的。

其次,我們定義所有使用者對整個目錄有讀寫權限:

[/]

* = rw

很顯然,這樣設定,保證了使用者john所有目的讀寫權限,也保證了harry和sally對foo目錄的讀寫權限。那麼,下一步就是開始對harry和sally進行權限的限制。

設定他們對子目錄secret1的隻讀權限:

[/secret1]

@grp_limit = r

設定他們對不可讀取子目錄secret2:

[/secret2]

@grp_limit =

可見,設定使用者權限的時候,'='左側代表使用者名稱,可以是實際使用者名,也可以是定義的使用者組名,但要用'@'作為字首,或者是所有使用者'*'。'='右側代表設定的權限'r'、'rw'或者為空即代表使用者對于該目錄無任何權限。

3. 總結

(1)使用者某個目錄的權限是向子目錄遞歸的。如果使用者對于/foo目錄有讀寫權限,則該使用者對于foo目錄下的所有子目錄都有讀寫權限。

(2)權限配置設定,隻可以配置設定到某個目錄,而不能到某個檔案

參考資料:

1 《svn權限配置檔案(authz)分析》 http://blog.csdn.net/saiya_kwok/archive/2009/02/20/3914294.aspx

svn
上一篇: svn配置權限

繼續閱讀