隨筆-6  評論-38  文章-40  trackbacks-0

          在閱讀本文之前,請確定你已經知道了Subversion基本的服務器管理,知道了svnserve或Apache的配置,清楚如何設置用戶和密碼。關于svnserve的配置可以看我們的《Subversion快速入門教程》和《用Apache 和Subversion 搭建安全的版本控制環境》,對于一些細節情參考《使用Subversion進行版本控制》。

          作為一個配置管理員,需要管理用戶的權限,本文主要介紹了使用Subversion的授權文件“authz-db”,同時為了敘述的清晰,我首先澄清一些概念。

          1,認證(Authentication)和授權(Authorization)

          這兩個術語經常一起出現。其中認證的意思就是鑒別用戶的身份,最常見的方式就是使用用戶名和密碼,授權就是判斷用戶是否具備某種操作的權限,在Subversion里提供了“authz-db”文件,實現了以路徑為基礎的授權,也就是判斷用戶是否有操作對應路徑的權限,在Subversion 1.3之后,svnserve和Apache一樣都可以使用“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

          上面的配置說明使用“svnserve.conf”同目錄的passwd和authz,其中的password-db指定了用戶密碼文件,authz-db是我們的授權文件,也就是我們本文主要介紹的文件。

          注意:使用Apache作為服務器時,根本就不會參考“svnserve.conf”文件的內容,而是會參考Apache的配置。


          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,測試用戶和組說明

          版本庫禁止任何匿名用戶的訪問,只對認證用戶有效。

          root:配置管理管理員,對版本庫有完全的管理權限。

          p1_admin1:project1的管理員,對project1有完全權限。
          p1_d1:project1的開發者,對project1的trunk有完全的權限,但是對其中的/trunk/admin目錄沒有任何權限。
          p1_t1:project1的測試者,對project1的trunk有完全的讀權限,但是對其中的/trunk/admin目錄沒有任何權限。

          p2_admin1:project2的管理員,對project2有完全權限。
          p2_d1:project2的開發者,對project2的trunk有完全的權限,但是對其中的/trunk/admin目錄沒有任何權限。
          p2_t1:project2的測試者,對project2的trunk有完全的讀權限,但是對其中的/trunk/admin目錄沒有任何權限。


          對應的組及組的用戶:
          p1_group_a:p1_admin1
          p1_group_d:p1_d1
          p1_group_t:p1_t1
          p2_group_a:p2_admin1
          p2_group_d:p2_d1
          p2_group_t:p2_t1


          5,修改D:\SVNROOT\passwd文件

          前面已經說過了,用戶和密碼文件應該是在D:\SVNROOT\passwd,所以我們為每一位用戶設置權限,文件內容如下:

          						[users]
          p1_admin1 = p1_admin1
          p1_d1 = p1_d1
          p1_t1 = p1_t1
                   
          p2_admin1 = p2_admin1
          p2_d1 = p2_d1
          p2_t1 = p2_t1

          為了便于驗證,所有密碼和用戶名一致,如果你使用的是其他認證方式,這一步可能不同,但是用戶名應該都是一樣的。

          6,配置授權,修改D:\SVNROOT\authz

          [groups]
          # 定義組信息

          p1_group_a = p1_admin1
          p1_group_d = p1_d1
          p1_group_t = p1_t1

          p2_group_a = p2_admin1
          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]
          # 指定對版本庫project1的/trunk/admin根目錄的權限
          @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”,然后保存。

          再復雜的情況也不過如此,在實際的工作中要首先規劃好權限,只賦給用戶最小的權限,保證以最小的配置實現最復雜的權限控制。

          posted on 2006-12-02 20:34 一手的小窩窩 閱讀(182) 評論(0)  編輯  收藏 所屬分類: OTHER
          主站蜘蛛池模板: 环江| 松原市| 南投市| 石首市| 盐池县| 九寨沟县| 泉州市| 饶阳县| 平原县| 深圳市| 桂东县| 五莲县| 乐山市| 托克逊县| 万盛区| 宁南县| 富宁县| 澄城县| 翁牛特旗| 额济纳旗| 延寿县| 凌源市| 印江| 内黄县| 阳新县| 千阳县| 仁怀市| 都江堰市| 浦城县| 龙井市| 两当县| 博兴县| 项城市| 呼玛县| 班戈县| 屏边| 凤台县| 宁远县| 南澳县| 本溪| 游戏|