這個標題還真長, 不過就如同標題所寫的
這是一個 tutorial, 如果你想要管理多個 project 用 trac & subversion & ldap
軟體版本:
- Subversion 1.6
- Apache 2.2
- Trac 0.11
- mod_python 3.3
先備的動作:
- 安裝 subversion with mod_dav_svn option
- 安裝 trac on Apache using mod_python
trac 跟 subversion 有一個共同的特色, 就是它們都可以透過 apache 作認證,
因此我們是透過 apache 去做 LDAP 的認證
首先你必須先建立一個存放 svn repoistories 的目錄, 我是建在 /home/svn
同樣的也需要一個存放多個 project 的 trac 目錄, 我是建在 /home/trac
接下來要做的就是 apache 的設定分別是
/usr/local/etc/apache22/Includes/mod_dav_svn.conf:
<Location /svn>
DAV svn
SVNParentPath /usr/home/svn
SVNListParentPath on# our access control policy
AuthzSVNAccessFile /usr/home/svn/svn-access-fileAuthType Basic
AuthName “Subversion repository”# Make LDAP the authentication mechanism
AuthBasicProvider ldap# Make LDAP authentication is final
AuthzLDAPAuthoritative onAuthLDAPURL “ldap://ldap-host:389/ou=People,dc=test,dc=domain?uid?sub?(objectClass=*)”
Require valid-user</Location>
設定好了這些在重開 apache 之後應該是能在 http://hostname/svn 底下看到你的所有 repositories (當然要先登入)
再來就是 /usr/local/etc/apache22/Includes/trac.conf:
<Location /trac>
SetHandler mod_python
PythonInterpreter main_interpreter
PythonHandler trac.web.modpython_frontend
PythonOption TracEnvParentDir /usr/home/trac
PythonOption TracUriRoot /trac</Location>
<LocationMatch “/trac/[^/]+/login”>AuthType Basic
AuthName “Trac”# Make LDAP the authentication mechanism
AuthBasicProvider ldap# Make LDAP authentication is final
AuthzLDAPAuthoritative onAuthLDAPURL “ldap://ldap-host:389/ou=People,dc=test,dc=domain?uid?sub?(objectClass=*)”
Require valid-user</LocationMatch>
完成以上的動作, 也完成了三分之二的設置, 最後你會發現一個問題
如果你沒有仔細的在用或許不會發現
在管理多個 repositories 的過程中, 我們會透過 SVN Access File 來控管各個 repositories 以及 repository 中目錄的存取權
然而, 這個設定到目前為止只有 svn 在使用, 也就是說 trac 他仍然可以不受限制的讀寫 repository 中的所有檔案,
如果要把這份限制應用到 trac 上就必須在 trac 的設定檔
/usr/home/trac/<project_name>/conf/trac.ini 加入以下的設定:
[trac]
authz_file = /usr/home/svn/svn-access-file
authz_module_name = <project_name>
- authz_file 用來指定到 svn 所定義的 access file 引用相同的限制
- authz_module_name 是用來設定, 這個 trac project 所使用的 repository name
一般來講在只有一個 project 的情況下是不需要設 authz_module_name 的,
但 svn 在管理多個 repositories 的 acl 的時候, 用了 [repository name:path] 的格式
來定義各別 repository 的存取權, 因此為了讓 trac 能明白自己所使用的 repository name 因此要再定義此項設定
否則存取權的設定結果可能不會如你所預期的運作
有關 SVN Access FILE 的設定說明可以參考此處:
- Bug’s Living Diary – Subversion Authentication with LDAP and access control using apache 2.2
- Svnbook – HttpD Authz PerDir
- Svnbook – Path based Authz
有關 Trac 設定的參考文獻如下:
- Bug’s Living Diary – Trac + Apache + LDAP at FreeBSD 7
- Trac – TracPythonMod
- Trac – TracFineGrainedPermissions
- Trac – TracIni
Filed under: 蟲的研究心得
