文章來源: 哥德巴赫猜想
本文主要是分析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)權限配置設定,隻可以配置設定到某個目錄,而不能到某個檔案
參考資料: