• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            牽著老婆滿街逛

            嚴(yán)以律己,寬以待人. 三思而后行.
            GMail/GTalk: yanglinbo#google.com;
            MSN/Email: tx7do#yahoo.com.cn;
            QQ: 3 0 3 3 9 6 9 2 0 .

            Subversion之路 - 利用 svnserve.exe 實(shí)現(xiàn)精細(xì)的目錄訪問控制(v1.0)

            轉(zhuǎn)載自:http://swjr.blog.com.cn/archives/2006/TheRoadToSubversion1authz.shtml#to-do-list
            作者:鄭新星


            Subversion之路

            實(shí)現(xiàn)精細(xì)的目錄訪問權(quán)限控制

            作者: 鄭新星
            聯(lián)系: zhengxinxing <AT> gmail <DOT> com
            狀態(tài): 正稿
            版本: 1.0
            修訂: The.Road.to.Subversion_authz.rst 1750 2006-12-05 08:14:24Z zhengxinxing
            版權(quán): 作者保留對(duì)本文的一切修改、發(fā)布等權(quán)力。任何人想要轉(zhuǎn)載本文部分或全部內(nèi)容時(shí),必須保留包括作者、聯(lián)系、狀態(tài)、版本、修訂、版權(quán),共六項(xiàng)信息,并給出出處。對(duì)本文的參考引用,則不受限制。
            關(guān)鍵詞: Subversion 目錄訪問 權(quán)限

            獻(xiàn)辭

            僅以本文,獻(xiàn)給中國廣大的自由軟件愛好者們

            摘要

            本文從一個(gè)實(shí)際的例子入手,介紹了如何利用 Subversion 自帶的目錄管理功能,來實(shí)現(xiàn)對(duì)項(xiàng)目目錄的精細(xì)訪問權(quán)限的控制。同時(shí)描述了在配置的過程中,需要注意的一些地方,如對(duì)中文的處理等。

            目 錄

            1   前言

            1.1   Subversion 權(quán)限簡介

            在 Subversion 的使用當(dāng)中,存在“認(rèn)證”、“授權(quán)”兩個(gè)概念。認(rèn)證,即 authentication,是指用戶名與密碼的認(rèn)證。授權(quán),即 authorization ,是指某用戶對(duì)某個(gè)目錄是否具備讀、寫權(quán)限的一種審核。這兩者配合作用,就組成了 Subversion 的整個(gè)帳戶管理體系。

            在實(shí)際的工作當(dāng)中,我們有時(shí)候會(huì)遇見需要控制項(xiàng)目目錄的訪問權(quán)限的情況,比如說對(duì)項(xiàng)目的一些關(guān)鍵模塊進(jìn)行限制,僅允許少數(shù)授權(quán)人士才可以修改等。由于項(xiàng)目的目錄本身就是作為版本庫的一個(gè)部分被 Subversion 所收管,所以我們無法利用操作系統(tǒng)的帳戶權(quán)限體系,來實(shí)現(xiàn)授權(quán)控制。因此,這個(gè)問題就只有讓svn自己來解決了。

            Subversion 提供了面向目錄的帳戶權(quán)限管理功能,通過它,我們就可以很精確地實(shí)現(xiàn)項(xiàng)目目錄的訪問控制。不過在 1.2 及其以前的版本,我們只能利用 mod_authz_svn.so 模塊,結(jié)合 Apache 服務(wù)器來實(shí)現(xiàn)目錄訪問控制,這對(duì)于對(duì) Apache 的配置與使用不是很熟悉的人來說,就不是很方便了。而Subversion終于在 1.3 版本上,在 svnserve.exe 服務(wù)器里面添加了這一功能,方便了很多人。

            1.2   其他信息

            本文面向那些 Subversion 的管理員,或者任何對(duì) Subversoin 有興趣的人們。本文假定讀者對(duì)Subversion有一定的了解,因此不打算對(duì)所有涉及到的安裝、使用,做一個(gè)細(xì)節(jié)性的描述。若對(duì)于文章中描述的其他細(xì)節(jié)方面有所疑問,請(qǐng)?jiān)L問“參考文獻(xiàn)”一節(jié)里面的參考資料。如果你對(duì)本文任何地方有什么意見,或者發(fā)現(xiàn)本文有著大大小小的錯(cuò)誤,請(qǐng)聯(lián)系 zhengxinxing <AT> gmail <DOT> com 。

            本文是基于 Subversion 1.3.2、MS Windows 2003 Server Edition 平臺(tái)來編寫的,且 Subversion 服務(wù)器是利用 svnserve.exe 來架設(shè)的。不過,本文講述到的絕大多數(shù)內(nèi)容,都是不僅與操作系統(tǒng)平臺(tái)無關(guān),而且與是采用 svnserve(.exe) 還是使用 Apache 來作為 Subversion 服務(wù)器也基本無關(guān)。因此為免羅嗦,本文就以 svnserve(.exe) 為例進(jìn)行描述,而略過 Apache 服務(wù)器相關(guān)的內(nèi)容,有興趣的讀者可以參考其他文章來在 Apache 服務(wù)器下實(shí)現(xiàn)類似的功能。

            本文是利用 reST 格式來編寫的,如果你對(duì)它感興趣,請(qǐng)?jiān)L問 http://docutils.sourceforge.net/rst.html 。如果想要看到更好的html格式,你可以通篇復(fù)制本文到一個(gè)文本文件里,然后利用 docutils 的 rst2html.py 腳本編譯它,當(dāng)然,首先你必須安裝 python。

            本文的獲得方式:

            2   致謝

            非常感謝 iusesvn.com 站的站長 PCplayer ,他在本文編寫過程中,給我提出了很多寶貴的意見與建議。

            感謝 woodpecker.org.cn 提供的 Subversion 空間,讓更多的人可以通過 svn 獲得本文件。

            感謝 google 公司提供的免費(fèi)主頁空間,讓我可以放置完全定制的 HTML 文件。

            3   實(shí)戰(zhàn)

            本章先直接給出需求及其最終的結(jié)果,如果你覺得對(duì)配置有什么疑問,或者看不懂,請(qǐng)不要著急,我會(huì)在后面的章節(jié)詳細(xì)描述的。

            3.1   背景假設(shè)

            廈門央瞬公司是一家電子元器件設(shè)備供應(yīng)商,其中有個(gè)ARM部門,專門負(fù)責(zé)ARM芯片的方案設(shè)計(jì)、銷售,并在北京、上海各設(shè)立了一個(gè)辦事處。對(duì)于工作日志,原先采用郵件方式發(fā)給經(jīng)理,但是這種方式有個(gè)缺點(diǎn),那就是不具備連續(xù)性,要看以前的日志必須一封一封郵件去查看,很麻煩。于是就想到利用 Subversion, 讓員工在自己電腦上編輯日志,然后利用svn傳送回來,既方便員工自己編寫日志,又方便對(duì)日志的歸檔處理,而且提交日志的時(shí)候只需要執(zhí)行一下 svn commit 即可,比發(fā)送郵件還要簡單的多。

            • svn服務(wù)器相關(guān)信息

              • 服務(wù)器地址: 192.168.0.1
              • 服務(wù)器OS: MS Windows 2000 Server Edition 中文版
              • 用于存放日志的代碼庫本地目錄: D:\svn\arm
            • arm部門文檔的目錄結(jié)構(gòu)如下:

              arm                 部門名稱
                  ├─diary           工作日志目錄
                  │  ├─headquarters    總部工作日志目錄
                  │  ├─beijing         北京辦日志目錄
                  │  └─shanghai        上海辦日志目錄
                  ├─ref             公司公共文件參考目錄
                  └─temp            臨時(shí)文件目錄
                  
            • 人員情況

              • morson,公司總經(jīng)理,不習(xí)慣使用電腦,更喜歡傳統(tǒng)的紙與筆,以及面對(duì)面的交流
              • michael,arm事業(yè)部的部門經(jīng)理,沒事的時(shí)候喜歡弄點(diǎn)兒新技術(shù),用svn來管理日志,就是他想出來的主意
              • scofield,北京辦人員,老員工,為人油滑難管
              • lincon,上海辦人員,老員工,大老實(shí)人一個(gè)
              • linda,總部協(xié)調(diào)員、秘書,文筆不錯(cuò),長得也不錯(cuò)
              • rory,單片機(jī)技術(shù)員,技術(shù)支持
            • 訪問權(quán)限需求分析

              • 允許總經(jīng)理、部門經(jīng)理讀取所有文件。順便給他們開放寫權(quán)限,以便體現(xiàn)對(duì)他們職位的尊重,雖然對(duì)于某些文件來說,他們?nèi)魮碛?#8220;寫”權(quán)限其實(shí)也沒什么用處
              • 除部門經(jīng)理外,所有其他人員,均只能看到本辦事處人員工作日志
              • 不允許匿名訪問
              • ref目錄只允許經(jīng)理和秘書讀寫,對(duì)其他人只讀
              • temp目錄人人都可以隨意讀寫

            3.2   使用 svnserve.exe 作為 Subversion 服務(wù)器

            本節(jié)描述如何利用 svnserve.exe 來作為代碼庫服務(wù)器端,實(shí)現(xiàn)上述功能。至于另外一種代碼庫服務(wù)器端,即利用 Apache 結(jié)合 mod_dav_svn.so 來實(shí)現(xiàn)的代碼庫服務(wù)器端,由于其對(duì)于本文敘述的內(nèi)容“實(shí)現(xiàn)精細(xì)的目錄訪問權(quán)限控制”而言,與前者沒有太大的區(qū)別,故而略過不提。它們二者只是在初次安裝、配置方面存在一些不同,有興趣的讀者,可以參考其他文檔,重新實(shí)驗(yàn)下述步驟。

            3.2.1   啟動(dòng) Subversion 服務(wù)

            在服務(wù)器端,打開一個(gè)命令行窗口,用CD命令進(jìn)入 Subversion 安裝目錄下的 bin 目錄,運(yùn)行如下指令:

            svnserve -d -r d:\svn
            

            其中的 -d 參數(shù)表示 svnserve.exe 將會(huì)作為一個(gè)服務(wù)程序運(yùn)行在后臺(tái),而 -r 參數(shù)表示將 D:\svn 目錄指定為代碼庫的根目錄。這樣,當(dāng)客戶端使用類似 svn://192.168.0.1/foo 這樣內(nèi)容的 URL 來訪問服務(wù)器時(shí)候,其所訪問到的真實(shí)代碼庫,其實(shí)就是 D:\svn\foo

            用上述命令行方式啟動(dòng)的 svn 服務(wù)有個(gè)小缺點(diǎn),就是在本試驗(yàn)過程中,服務(wù)器端必須要一直開著那個(gè)運(yùn)行了上述命令的DOS窗口,不能關(guān)閉它。如果不想看到這個(gè)窗口,可以將 svnserve 安裝成 windows 的一個(gè) services,安裝方式請(qǐng)參考其他文章。

            3.2.2   建立代碼庫

            在服務(wù)器端的 D:\svn 目錄下,建立一個(gè)名為 arm 的代碼庫,命令如下:

            D:\svn>svnadmin create arm
            

            使用上述命令之后,如果不出問題的話,在 D:\svn 目錄下就會(huì)多出一個(gè)叫做 arm 的目錄,其下具備 conf、dav、hooks、locks、db 等子目錄或文件,此即 一個(gè)名為arm的代碼庫 。從此,通過svn://192.168.0.1/arm 這樣的 URL,我們就可以對(duì)這個(gè)代碼庫進(jìn)行訪問了。接下來就要進(jìn)入本文的正題了,也就是權(quán)限配置部分了。

            其實(shí)進(jìn)入 arm\conf 目錄你就會(huì)發(fā)現(xiàn),它下面已經(jīng)存在三個(gè)寫了一些幫助信息和示例的配置文件,以幫助用戶盡早掌握其配置方法。這三個(gè)默認(rèn)的配置文件分別是 svnserve.conf、passwd、authz 。其中后兩者沒有后綴,對(duì)于 windows 系統(tǒng)的用戶來說,看起來總是有些怪異,所以在接下來的章節(jié)里面,我將它們兩個(gè)都給添加了個(gè) conf 后綴,以便管理。

            3.2.3   編輯代碼庫基礎(chǔ)配置文件

            在服務(wù)器端,編輯代碼庫的 arm\conf\svnserve.conf 文件,如下:

            [general]
            password-db = passwd.conf
            anon-access = none
            auth-access = write
            authz-db = authz.conf
            

            3.2.4   管理用戶帳號(hào)

            在服務(wù)器端,新建 arm\conf\passwd.conf 文件,如下:

            [users]
            morson = ShowMeTheMoney
            michael = mysecretpassword
            scofield = hellolittilekiller
            lincon = asyouknows111
            rory = 8809117
            linda = IlikeWorldCup2006
            

            3.2.5   建立目錄訪問權(quán)限控制文件

            在服務(wù)器端,新建 arm\conf\authz.conf 文件,內(nèi)容如下:

            [groups]
            g_vip = morson
            g_manager = michael
            g_beijing = scofield
            g_shanghai = lincon
            g_headquarters = rory, linda
            g_docs = linda
            [arm:/]
            @g_manager = rw
            * = r
            [arm:/diary/headquarters]
            @g_manager = rw
            @g_headquarters = rw
            @g_vip = r
            * =
            [arm:/diary/beijing]
            @g_manager = rw
            @g_beijing = rw
            @g_vip = r
            * =
            [arm:/diary/shanghai]
            @g_manager = rw
            @g_shanghai = rw
            @g_vip = r
            * =
            [arm:/ref]
            @g_manager = rw
            @g_docs = rw
            * = r
            [arm:/temp]
            * = rw
            

            3.2.6   導(dǎo)入代碼

            在客戶機(jī) F:\temp 目錄下,建立好前述“背景假設(shè)”一節(jié)中描述的目錄結(jié)構(gòu),然后用命令 F:\temp>svn import arm svn://192.168.0.1/arm --username michael --password mysecretpassword 導(dǎo)入整個(gè)目錄結(jié)構(gòu)。

            這條指令的精確意思是,將 arm 目錄下面的所有東西,導(dǎo)入到那個(gè)名叫 arm 的代碼庫中去。如果你不指定源目錄,則 svn 會(huì)默認(rèn)將當(dāng)前目錄作為源目錄。比如說,你處于 F:\temp 目錄下的時(shí)候,直接執(zhí)行svn import svn://192.168.0.1/arm ,那么當(dāng)你取出你的代碼的時(shí)候,你會(huì)發(fā)現(xiàn),居然多了一層名為 arm 的目錄。結(jié)果,你就必須使用類似 svn://192.168.0.1/arm/arm 這樣怪異的URL,才能夠正確訪問到你的代碼們。

            這一點(diǎn)粗看好像不是特別重要,不過聯(lián)想到前述的目錄授權(quán)規(guī)則,可都是按照標(biāo)準(zhǔn)的項(xiàng)目目錄結(jié)構(gòu)來設(shè)計(jì)的。突然之間,你項(xiàng)目的根目錄之上,多出了一個(gè)名為 arm 的目錄,那么我們的所有目錄授權(quán)規(guī)則,基本上都要全部改過了,否則除了根目錄,你永遠(yuǎn)會(huì)得到一個(gè)莫名其妙的“access denied”。由于 Subversion 在這一步驟上的界面不夠人性化,因此這是初學(xué)者很容易弄混的地方之一。

            3.2.7   測(cè)試

            在服務(wù)器上,打開一個(gè) DOS Prompt 窗口,輸入如下指令:

            svn co svn://127.0.0.1/arm --no-auth-cache --username rory --password 8809117
            

            我們應(yīng)該得到如下目錄結(jié)構(gòu):

            arm
            ├─diary
            │  └─headquarters
            ├─ref
            └─temp
            

            然后修改ref目錄下任意文件并提交,服務(wù)器將會(huì)報(bào)錯(cuò)“Access denied”,Bingo!

            4   深入

            本章將詳細(xì)介紹前一章所涉及的兩個(gè)配置文件, svnserve.conf 和 authz.conf,通過對(duì)配置逐行的描述,來闡明其中的一些細(xì)節(jié)含義。除此之外的其他配置、安裝等內(nèi)容,不是本文重點(diǎn),讀者若有什么疑問,請(qǐng)參考后面“參考文獻(xiàn)”中列出的一些文檔。

            這里首先要注意一點(diǎn),任何配置文件的有效配置行,都 不允許存在前置空格 ,否則程序可能會(huì)出錯(cuò),給你一個(gè) Option expected 的提示。也就是說,如果你直接從本文的純文本格式中拷貝了相關(guān)的配置行過去,需要手動(dòng)將前置的4個(gè)空格全部刪除。當(dāng)然了,如果你覺得一下子要?jiǎng)h除好多行的同樣數(shù)目的前置空格是一件苦差使,那么也許 UltraEdit 的“Column Mode”編輯模式,可以給你很大幫助。

            4.1   svnserve.conf

            arm\conf\svnserve.conf 文件,是 svnserve.exe 這個(gè)服務(wù)器進(jìn)程的配置文件,我們逐行解釋如下。

            首先,我們告訴 svnserve.exe,用戶名與密碼放在 passwd.conf 文件下。當(dāng)然,你可以改成任意的有效文件名,比如默認(rèn)的就是 passwd:

            password-db = passwd.conf
            

            接下來這兩行的意思,是說只允許經(jīng)過驗(yàn)證的用戶,方可訪問代碼庫。 那么哪些是“經(jīng)過驗(yàn)證的”用戶呢?噢,當(dāng)然,就是前面說那些在 passwd.conf 文件里面持有用戶名密碼的家伙。這兩行的等號(hào)后面,目前只允許 read write none 三種值,你如果想實(shí)現(xiàn)一些特殊的值,比如說“read-once”之類的,建議你自己動(dòng)手改源代碼,反正它也是自由軟件:

            anon-access = none
            auth-access = write
            

            接下來就是最關(guān)鍵的一句呢,它告訴 svnserve.exe,項(xiàng)目目錄訪問權(quán)限的相關(guān)配置是放在 authz.conf 文件里:

            authz-db = authz.conf
            

            當(dāng)然,svn 1.3.2 引入本功能的時(shí)候,系統(tǒng)默認(rèn)使用 authz 而不是 authz.conf 作為配置文件。不過可能由于鄙人是處女座的,據(jù)說有著強(qiáng)烈的完美主義情結(jié),看著 svnserve.conf 有后綴而 passwd 和 authz 沒有就是不爽,硬是要改了。

            上述的 passwd.conf 和 authz.conf 兩個(gè)文件也可以作為多個(gè)代碼庫共享使用,我們只要將它們放在公共目錄下,比如說放在 D:\svn 目錄下,然后在每個(gè)代碼庫的 svnserve.conf 文件中,使用如下語句:

            password-db = ..\..\passwd.conf
            authz-db = ..\..\authz.conf
            

            或者:

            password-db = ../../passwd.conf
            authz-db = ../../authz.conf
            

            這樣就可以讓多個(gè)代碼庫共享同一個(gè)用戶密碼、目錄控制配置文件,這在有些情況下是非常方便的。

            4.2   authz.conf 之用戶分組

            arm\conf\authz.conf 文件的配置段,可以分為兩類, [group] 是一類,里面放置著所有用戶分組信息。其余以 [arm:/] 開頭的是另外一類,每一段就是對(duì)應(yīng)著項(xiàng)目的一個(gè)目錄,其目錄相關(guān)權(quán)限,就在此段內(nèi)設(shè)置。

            首先,我們將人員分組管理,以便以后由于人員變動(dòng)而需要重新設(shè)置權(quán)限時(shí)候,盡量少改動(dòng)?xùn)|西。我們一共設(shè)置了5個(gè)用戶分組,分組名稱統(tǒng)一采用 g_ 前綴,以方便識(shí)別。當(dāng)然了,分組成員之間采用逗號(hào)隔開:

            [groups]
            # 任何想要查看所有文檔的非本部門人士
            g_vip = morson
            # 經(jīng)理
            g_manager = michael
            # 北京辦人員
            g_beijing = scofield
            # 上海辦人員
            g_shanghai = lincon
            # 總部一般員工
            g_headquarters = rory, linda
            # 小秘,撰寫文檔
            g_docs = linda
            

            注意到?jīng)]有, linda 這個(gè)帳號(hào)同時(shí)存在“總部”和“文檔員”兩個(gè)分組里面,這可不是我老眼昏花寫錯(cuò)了,是因?yàn)?Subversion 允許我這樣設(shè)置。它意味著,這個(gè)家伙所擁有的權(quán)限,將會(huì)比他的同事 rory 要多一些,這樣的確很方便。具體多了哪些呢?請(qǐng)往下看!

            4.3   authz.conf 之項(xiàng)目根目錄

            接著,我們對(duì)項(xiàng)目根目錄做了限制,該目錄只允許arm事業(yè)部的經(jīng)理才能修改,其他人都只能眼巴巴的看著:

            [arm:/]
            @g_manager = rw
            * = r
            
            • [arm:/] 表示這個(gè)目錄結(jié)構(gòu)的相對(duì)根節(jié)點(diǎn),或者說是 arm 項(xiàng)目的根目錄。其中的 arm 字樣,其實(shí)就是代碼庫的名稱,即前面用 svnadmin create 命令創(chuàng)建出來的那個(gè) arm。
            • 這里的 @ 表示接下來的是一個(gè)組名,不是用戶名。因?yàn)槟壳?g_manager 組里面只有一個(gè) michael,你當(dāng)然也可以將 @g_manager = rw 這一行替換成 michael = rw ,而表達(dá)的意義完全一樣。
            • * 表示“除了上面提到的那些人之外的其余所有人”,也就是“除了部門經(jīng)理外的其他所有人”,當(dāng)然也包括總經(jīng)理那個(gè)怪老頭
            • * = r 則表示“那些人只能讀,不能寫”

            4.4   authz.conf 之項(xiàng)目子目錄

            然后,我們要給總部人員開放日志目錄的讀寫權(quán)限:

            [arm:/diary/headquarters]
            @g_manager = rw
            @g_headquarters = rw
            @g_vip = r
            * =
            

            這個(gè)子目錄的設(shè)置有些特色,因?yàn)閺男枨蠓治鲋形覀冎溃@個(gè)子目錄的權(quán)限范圍要比其父目錄小,它不允許除指定了的之外其他任何人訪問。在這段設(shè)置中,我們需要注意以下幾點(diǎn):

            • 我敢打賭,設(shè)計(jì)svn的家伙們,大部分都是在類 unix 平臺(tái)下工作,所以他們總喜歡使用 / 來標(biāo)識(shí)子目錄,而完全忽視在 MS Windows 下是用 \ 來做同樣的事情。所以這兒,為了表示 diary\headquarters這個(gè)目錄,我們必須使用 [arm:/diary/headquarters] 這樣的格式。當(dāng)然如果你一定要用 \ ,那么唯一的結(jié)果就是,Subversion 會(huì)將你的這部分設(shè)置置之不理,全當(dāng)沒看到。
            • 這里最后一行的 * = 表示,除了經(jīng)理、總部人員、特別人士之外,任何人都被禁止訪問本目錄。這一行是否可以省略呢?不行,因?yàn)?nbsp;權(quán)限具備繼承性 ,子目錄會(huì)自動(dòng)擁有父目錄的權(quán)限。若沒有這一行,則所有帳號(hào)都可以讀取 /diary/headquarters 目錄下的文件。因?yàn)殡m然我們并沒有設(shè)置這個(gè)目錄的父目錄權(quán)限,可是默認(rèn)的規(guī)則使得 /diary 目錄的權(quán)限與根目錄完全一樣,從而讓其余帳號(hào)獲得對(duì)/diary/headquarters 目錄的 r 權(quán)限。所以簡單來說, * = 這一句的目的,就是割斷權(quán)限繼承性,使得管理員可以定制某個(gè)目錄及其子目錄的權(quán)限,從而完全避開其父目錄權(quán)限設(shè)置的影響。
            • 之所以這兒需要將 @g_vip = r 一句加上,就是因?yàn)榇嬖谏鲜鲞@個(gè)解釋。如果說你沒有明確地給總經(jīng)理授予讀的權(quán)力,則他會(huì)和其他人一樣,被 * = 給排除在外。
            • 如果眾位看官中間,有誰玩過防火墻配置的話,可能會(huì)感覺上述的配置很熟悉。不過這里有一點(diǎn)與防火墻配置不一樣,那就是各個(gè)配置行之間,沒有 先后順序 一說。也就是說,如果我將本段配置的 * = 這一行挪到最前面,完全不影響整個(gè)配置的最終效果。

            接下來我們看看這一段:

            [arm:/ref]
            @g_manager = rw
            @g_docs = rw
            * = r
            

            這里的主要看點(diǎn),就是 g_docs 組里面包含了一個(gè) linda 帳號(hào),她也同時(shí)在 g_headquarters 組里面出現(xiàn),這就意味著, linda 將具備對(duì) /ref 和 diary\headquarters 兩個(gè)目錄的讀寫權(quán)限。

            4.5   authz.conf 之目錄表示法

            在前面的描述中,我們都采用 [repos:/some/dir] 這樣的格式來表示項(xiàng)目的某個(gè)目錄,比如上一小節(jié)中的 [arm:/diary/headquarters] 。而實(shí)際上,Subversion 允許你采用 `[/some/dir] 這樣的格式,即不指定代碼庫的方式來表示目錄,此時(shí)的目錄就匹配所有項(xiàng)目。

            對(duì)于使用 svnserve 的用戶來說,只有當(dāng) svnserve 運(yùn)行的時(shí)候使用了 -r 參數(shù),并且讓多個(gè)代碼庫共享同一個(gè)目錄權(quán)限文件(即 authz.conf 或 authz)時(shí),不指明代碼庫名稱才有可能惹麻煩。一般情況下,我們對(duì)每個(gè)代碼庫都會(huì)獨(dú)立使用配置文件,畢竟每個(gè)項(xiàng)目的目錄結(jié)構(gòu),都有很大不同,混在一起意義不大。因此一般來說,為簡潔起見,都可以不指明代碼庫名稱。本文全都指明了代碼庫名稱,主要是為了將來擴(kuò)展成同一個(gè)配置文件,以方便配合 Apache 服務(wù)器。

            對(duì)于使用 Apache 的用戶來說,它們二者可有著很大的不同,因?yàn)榇藭r(shí)往往習(xí)慣于使用一個(gè)公共的目錄權(quán)限配置文件。如果你使用了 SVNParentPath 指令,則指定版本庫的名字是很重要的,因?yàn)榧偃裟闶褂煤笳撸敲?nbsp;[/some/dir] 部分就會(huì)與所有代碼庫項(xiàng)目的 [/some/dir] 目錄匹配。如果你使用 SVNPath 指令,則這兩種表示方式就沒有什么區(qū)別了,畢竟只有一個(gè)版本庫。

            4.6   authz.conf 的其他注意點(diǎn)

            1. 父目錄的 r 權(quán)限,對(duì)子目錄 w 權(quán)限的影響

            把這個(gè)問題專門提出來,是因?yàn)樵?.3.1及其以前的版本里面,有個(gè)bug,即某個(gè)帳號(hào)為了對(duì)某個(gè)子目錄具備寫權(quán)限,則必須對(duì)其父目錄具備讀權(quán)限。因此現(xiàn)在使用了1.3.2及其更高的版本,就方便了那些想在一個(gè)代碼庫存放多個(gè)相互獨(dú)立的項(xiàng)目的管理員,來分配權(quán)限了。比如說央舜公司建立一個(gè)大的代碼庫用于存放所有員工日志,叫做 diary,而arm事業(yè)部只是其中一個(gè)部門,則可以這樣做:

            [diary:/]
            @g_chief_manager = rw
            [diary:/arm]
            @g_arm_manager = rw
            @g_arm = r
            

            這樣,對(duì)于所有arm事業(yè)部的人員來說,就可以將 svn://192.168.0.1/diary/arm 這個(gè)URL當(dāng)作根目錄來進(jìn)行日常操作,而完全不管它其實(shí)只是一個(gè)子目錄,并且當(dāng)有少數(shù)好奇心比較強(qiáng)的人想試著 checkout 一下 svn://192.168.0.1/diary 的時(shí)候,馬上就會(huì)得到一個(gè)警告“Access denied”,哇,太酷了。

            1. 默認(rèn)權(quán)限

            如果說我對(duì)某個(gè)目錄不設(shè)置任何權(quán)限,會(huì)怎樣?馬上動(dòng)手做個(gè)試驗(yàn),將:

            [diary:/]
            @g_chief_manager = rw
            

            改成:

            [diary:/]
            # @g_chief_manager = rw
            

            這樣就相當(dāng)于什么都沒有設(shè)置。在我的 svn 1.3.2 版本上,此時(shí)是禁止任何訪問。也就是說,如果你想要讓某人訪問某目錄,你一定要顯式指明這一點(diǎn)。這個(gè)策略,看起來與防火墻的策略是一致的。

            1. 只讀權(quán)限帶來的一個(gè)小副作用

            若設(shè)置了:

            [arm:/diary]
            * = r
            

            則 Subversion 會(huì)認(rèn)為,任何人都不允許改動(dòng) diary 目錄,包括刪除、 改名 ,和 新增 。

            也就是說,如果你在項(xiàng)目初期創(chuàng)建目錄時(shí)候,一不小心寫錯(cuò)目錄名稱,比如因拼寫錯(cuò)誤寫成 dairy,以后除非你改動(dòng) authz.conf 里面的這行設(shè)置,否則無法利用 svn mv 命令將錯(cuò)誤的目錄更正。

            1. anon-access 屬性對(duì)目錄權(quán)限的影響

            你想將你的代碼庫開放給所有人訪問,于是你就開放了匿名訪問權(quán)限,在 svnserve.conf 文件中添加一行: anon-access=read 。可是對(duì)于部分目錄,你又不希望別人看到,于是針對(duì)那些特別目錄,你在 authz.conf 里面進(jìn)行配置,添加了授權(quán)訪問的人,并添加了 * = 標(biāo)記。你認(rèn)為一切OK了,可是你缺發(fā)現(xiàn),那個(gè)特別目錄卻無法訪問了,總是提示 Not authorized to open root of edit operation 或者未授權(quán)打開根進(jìn)行編輯操作 。你再三檢查你配置的用戶名與密碼,確認(rèn)一切正確,還是無法解決問題。

            原來,Subversion 有個(gè)小 bug ,當(dāng) anon-access=read 并且某個(gè)目錄有被設(shè)置上 * = 標(biāo)記,則會(huì)出現(xiàn)上述問題。這個(gè) bug 在當(dāng)前最新版本上(v1.4)還存在,也許在下一版本內(nèi)可以被改正吧。

            解決的辦法是,在 svnserve.conf 中,將 anon-access 設(shè)置成 none 。

            5   改進(jìn)

            5.1   對(duì)中文目錄的支持

            上午上班的時(shí)候,Morson 來到 Michael 的桌子前面,說道:“你是否可以將我們的北京辦、上海辦目錄,改成用中文的,看著那些拼音我覺得很難受?” Michael 心想,還好這兩天剛了解了一些與 unicode 編碼相關(guān)的知識(shí),于是微笑地回答:“當(dāng)然可以,你明天下午就可以看到中文目錄名稱了。”

            1. 使用 svn mv 指令,將原來的一些目錄改名并 commit 入代碼庫,改名后的目錄結(jié)構(gòu)如下:

              arm
                  ├─工作日志
                  │  ├─總部人員
                  │  ├─北京辦
                  │  └─上海辦
                  ├─公司公共文件參考目錄
                  └─臨時(shí)文件存放處
                  
            2. 修改代碼庫的 authz.conf 文件,將相應(yīng)目錄逐一改名

            3. UTF-8 格式的 authz.conf 文件,以及 BOM

              將配置文件轉(zhuǎn)換成 UTF-8 格式之后,Subversion 就能夠正確識(shí)別中文字符了。但是這里需要注意一點(diǎn),即必須保證 UTF-8 文件不包含 BOM 。BOM 是 Byte Order Mark 的縮寫,指 UNICODE 文件頭部用于指明高低字節(jié)排列順序的幾個(gè)字符,通常是 FF FE ,而將之用 UTF-8 編碼之后,就是 EF BB BF 。由于 UTF-8 文件本身不存在字節(jié)序問題,所以對(duì) UTF-16 等編碼方式有重大意義的 BOM,對(duì)于 UTF-8 來說,只有一個(gè)作用——表明這個(gè)文件是 UTF-8 格式。由于 BOM 會(huì)給文本處理帶來很多難題,所以現(xiàn)在很多軟件都要求使用不帶 BOM 的 UTF-8 文件,特別是一些處理文本的軟件,如 PHP、 UNIX 腳本文件等,svn 也是如此。

            目前常用的一些文本編輯工具中,MS Windows 自帶的“記事本”里面,“另存為”菜單保存出來的 UTF-8 格式文件,會(huì)自動(dòng)帶上 BOM 。新版本 UltraEdit 提供了選項(xiàng),允許用戶選擇是否需要 BOM,而老版本的不會(huì)添加 BOM。請(qǐng)各位查看一下自己常用的編輯器的說明文件,看看它是否支持這個(gè)功能。

            對(duì)于已經(jīng)存在 BOM 的 UTF-8 文件,比如說就是微軟“記事本”弄出來的,我們可以利用 UltraEdit 來將 BOM 去掉。方法是,首先利用“UTF-8 TO ASCII”菜單將文件轉(zhuǎn)換成本地編碼,通常是GB2312碼,然后再使用“ASCII TO UTF-8(UNICODE Editing)”來轉(zhuǎn)換到 UTF-8 即可。當(dāng)然,這么操作之前,你肯定得先保證,你的 UltraEdit 保存出來的 UTF-8 文件的確是不帶 BOM 的。

            Subversion 為什么討厭 BOM 呢?我不知道,畢竟我也只是一個(gè)普通用戶,不是開發(fā)人員。如果你感興趣,并且英文夠好的話,不妨參考一下這個(gè)討論:http://subversion.tigris.org/servlets/ReadMsg?list=users&msgNo=51334

            6   參考文獻(xiàn)

            7   歷史軌跡

            • 2006.06.04, v0.1
            • 2006.07.07, v0.4
              • 加入 www.woodpecker.org.cn 的 OBP 項(xiàng)目
            • 2006.10.11, v0.5
              • 修正部分錯(cuò)誤,調(diào)整部分章節(jié)順序
            • 2006.12.05, v1.0
              • 添加“權(quán)限簡介”一節(jié)
              • 調(diào)整“實(shí)戰(zhàn)”章的章節(jié)順序,添加一些說明,使之更具可讀性
              • 刪除一些與 apache 服務(wù)器相關(guān)的說明
              • 添加“目錄表示法”一小節(jié)
              • 重寫了“authz.conf 之項(xiàng)目子目錄”一小節(jié)

            posted on 2009-12-22 11:52 楊粼波 閱讀(1751) 評(píng)論(0)  編輯 收藏 引用


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            久久本道久久综合伊人| 日韩亚洲国产综合久久久| 久久精品综合网| 一本久久a久久精品vr综合| 国产精品久久波多野结衣| 伊人久久成人成综合网222| 精品久久久久久无码专区| 三级三级久久三级久久 | 国产精品无码久久久久久| 免费精品99久久国产综合精品| 久久天天躁夜夜躁狠狠躁2022| AAA级久久久精品无码区| 久久久噜噜噜久久中文福利| 亚洲人AV永久一区二区三区久久| 国产69精品久久久久APP下载| 久久人爽人人爽人人片AV| 久久久久久久久久久| 久久99国产精品久久| 久久精品一区二区国产| 日韩精品无码久久一区二区三| 久久99热只有频精品8| 久久亚洲欧洲国产综合| 少妇被又大又粗又爽毛片久久黑人 | 99re久久精品国产首页2020| 久久人人爽人人爽人人片AV不| 久久亚洲精品成人av无码网站| 久久精品国产99久久香蕉| 久久99亚洲综合精品首页| 国产成人精品三上悠亚久久| 久久久久99精品成人片三人毛片 | 性做久久久久久免费观看| 嫩草影院久久99| 精品人妻久久久久久888| 综合久久国产九一剧情麻豆| 久久中文字幕视频、最近更新| 久久久久中文字幕| 狠色狠色狠狠色综合久久| 91视频国产91久久久| 成人资源影音先锋久久资源网| 色欲久久久天天天综合网精品| 国产午夜久久影院|