本節向大家描述一下SVN權限配置問題,在學習版本控制工具SVN時,了解了SVN權限配置才能更好的對SVN進行操作,歡迎大家一起來學習SVN權限配置方法。
作為一個配置管理員,需要管理用戶的權限,本文主要介紹了使用Subversion的授權文件“authz-db”,同時為了敘述的清晰,我首先澄清SVN權限配置的一些概念。
1.認證(Authentication)和授權(Authorization)
這兩個術語經常一起出現。其中認證的意思就是鑒別用戶的身份,最常見的方式就是使用用戶名和密碼,授權就是判斷用戶是否具備某種操作的權限,在Subversion里提供了“authz-db”文件,實現了以路徑為基礎的授權,也就是判斷用戶是否有操作對應路徑的權限。
2.svnserve下的配置文件
因為本文是以svnserve為例的,所以先介紹一下版本庫目錄的結構:
D:\SVNROOT\PROJECT1
├─conf
├─dav
├─db
│├─revprops
│├─revs
│└─transactions
├─hooks
└─locks
其中conf下面有三個文件:
authz
passwd
svnserve.conf
其中的“svnserve.conf”是這個版本庫的配置文件,當使用svnserve時,這個配置文件決定了使用什么認證和授權文件:
password-db=passwd
authz-db=authz
上面的SVN權限配置說明使用“svnserve.conf”同目錄的passwd和authz,其中的password-db指定了用戶密碼文件,authz-db是我們的授權文件,也就是我們本文主要介紹的文件。
3.基於svnserve的版本庫文件布局
使用svnserve時,為了管理的方便,應該使用相同的認證和授權文件,所以應該讓所有版本庫的配置文件svnserve.conf指向同一個password-db和authz-db文件。下面是一個多版本庫的目錄:
D:\SVNROOT
├─project1
│├─conf
│├─dav
│├─db
││├─revprops
││├─revs
││└─transactions
│├─hooks
│└─locks
└─project2
├─conf
├─dav
├─db
│├─revprops
│├─revs
│└─transactions
├─hooks
└─locks
D:\SVNROOT下有兩個目錄project1和project2,都已經創建了版本庫,所以我們修改每個conf目錄下的svnserve.conf,使之指向同一個password-db和authz-db文件。
password-db=..\..\passwd
authz-db=..\..\authz
這樣,D:\SVNROOT\passwd和D:\SVNROOT\authz就控制了所有版本庫的svnserve訪問。另外在后面的操作中要關閉匿名訪問,應該去掉“anon-access=none”前的“#”號,保證只有認證用戶可以訪問。
注意:還有一點需要注意,那就是svnserve的“realm”的值,在上面的設置下,應該保證所有的版本庫使用相同的realm值,這樣,對版本庫的密碼緩存可以在多個版本庫之間共享,更多細節見客戶端憑證緩存。
4.測試用戶和組說明
再來看一下SVN權限配置中測試用戶和組說明問題。版本庫禁止任何匿名用戶的訪問,只對認證用戶有效。
root:配置管理管理員,對版本庫有完全的管理權限。
p1_a1:project1的管理員,對project1有完全權限。
p1_d1:project1的開發者,對project1的trunk有完全的權限,但是對其中的/trunk/admin目錄沒有任何權限。
p1_t1:project1的測試者,對project1的trunk有完全的讀權限,但是對其中的/trunk/admin目錄沒有任何權限。
p2_a1:project2的管理員,對project2有完全權限。
p2_d1:project2的開發者,對project2的trunk有完全的權限,但是對其中的/trunk/admin目錄沒有任何權
p2_t1:project2的測試者,對project2的trunk有完全的讀權限,但是對其中的/trunk/admin目錄沒有任何權限。
對應的組及組的用戶:
p1_group_a:p1_a1
p1_group_d:p1_d1
p1_group_t:p1_t1
p2_group_a:p2_a1
p2_group_d:p2_d1
p2_group_t:p2_t1。
1.修改D:\SVNROOT\passwd文件
前面已經說過了,用戶和密碼文件應該是在D:\SVNROOT\passwd,所以我們為每一位用戶設置權限,文件內容如下:
[users]
p1_a1=p1_a1
p1_d1=p1_d1
p1_t1=p1_t1
p2_a1=p2_a1
p2_d1=p2_d1
p2_t1=p2_t1
為了便於驗證,所有密碼和用戶名一致,下面看一下SVN權限配置中如何配置授權。
2.配置授權,修改D:\SVNROOT\authz
[groups]
#定義組信息
p1_group_a=p1_a1
p1_group_d=p1_d1
p1_group_t=p1_t1
p2_group_a=p2_a1
p2_group_d=p2_d1
p2_group_t=p2_t1
[/]
#指定所有的版本庫默認只讀,root可讀寫
*=r
root=rw
[project1:/]
#指定對版本庫project1根目錄的權限
@p1_group_a=rw
@p1_group_d=rw
@p1_group_t=r
[project1:/trunk/admin]
#指定對版本庫project1的/trunk/admin根目錄的權限,
#p1_group_a讀寫,p1_group_d和p1_group_t沒有任何權限。
@p1_group_a=rw
@p1_group_d=
@p1_group_t=
[project2:/]
#指定對版本庫project2根目錄的權限
@p2_group_a=rw
@p2_group_d=rw
@p2_group_t=r
[project2:/trunk/admin]
#指定對版本庫project2的/trunk/admin根目錄的權限,繼續介紹SVN權限配置。
#p2_group_a讀寫,p2_group_d和p2_group_t沒有任何權限。
@p2_group_a=rw
@p2_group_d=
@p2_group_t=
經過以上設置以后,你會發現當使用用戶“p1_d1”,檢出project1的trunk時,目錄是空的,好像admin目錄根本不存在一樣,當使用p1_d1用戶瀏覽版本庫時,能夠看到admin目錄,但是其中的內容卻無法看到。
關於中文目錄,也是沒有問題的,只是注意要把authz文件轉化為UTF-8格式,在我的WINXP的UltraEdit里顯示的文件格式為U8-DOS,具體的做法是用UltraEdit打開authz文件,然后選擇“文件->轉換->ASCII轉UTF-8”,然后保存。再復雜的情況也不過如此,在實際的工作中要首先規划好權限,只賦給用戶最小的權限,保證以最小的配置實現最復雜的權限控制。本節SVN權限配置講解完畢。