Apache-2.2
使用 Dav SVN Authz 設置 SVN 權限
似乎有一個路徑繼承問題讓我對訪問限制感到困惑。例如,如果我授予
rw
一個組/使用者訪問權限,並希望將其限制/../../secret
為無,它會立即吐在我的臉上。這是我在 dav_svn.authz 中嘗試實現的範例
[groups] grp_W = a, b, c, g grp_X = a, d, f, e grp_Y = a, e, [/] * = @grp_Y = rw [somerepo1:/projectPot] @grp_W = rw [somerepo2:/projectKettle] @grp_X = rw
預期:
grp_Y
可以rw
訪問所有儲存庫,同時grp_W
並且grp_X
只能訪問它們各自的儲存庫。發生的情況:
grp_Y
可以訪問所有儲存庫,而grp_W
無法grp_X
訪問任何內容如果我翻轉訪問順序,讓每個人都可以訪問並在每個儲存庫中限制它,它會立即忽略無效規則(剝奪權利)並給予每個人在根級別授予的訪問權限。
前述組,與使用者特定規定執行相同;甚至完全定義,例如:
[/] a = rw b = c = d = e = f = g = rw [somerepo1:/projectPot] a = rw b = rw c = rw d = e = rw f = g = rw [somerepo2:/projectKettle] a = rw b c d = rw e = rw f = rw g
這會產生完全相同的結果。根據**文件**,我遵循所有協議,所以這太瘋狂了。
使用 dav_svn 在 Apache2 上執行
經過一堆頭痛之後,我讓這個閒置
* = rw
在SVNParentPath
水平。回過頭來,我突然有一種明顯的打擊。閱讀順序是問題所在。首先,我的命名約定完全是錯誤的
[<repo_name>:<path-in-repo>]
主要問題是 authz 文件需要應用第一個讀取規則或可用匹配的“特異性”順序。就我而言,一切都將與根匹配,並且一勞永逸。因此通過顛倒我的範例排序:
[groups] grp_W = a, b, c, g grp_X = a, d, f, e grp_Y = a, e, [ProjectPot:/] @grp_W = rw [ProjectKettle:/] @grp_X = rw [/] * = @grp_Y = rw
會使其被接受並按行為表現。這沒有記錄在案,在我看來,這是對完全微不足道的事情的嚴重混亂。