BUG's Living Diary

Icon

蟲的生活日誌

trac + subversion + apache + ldap with multiple projects

這個標題還真長, 不過就如同標題所寫的

這是一個 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-file

AuthType Basic
AuthName “Subversion repository”

# Make LDAP the authentication mechanism
AuthBasicProvider ldap

# Make LDAP authentication is final
AuthzLDAPAuthoritative on

AuthLDAPURL “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 on

AuthLDAPURL “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>

  1. authz_file 用來指定到 svn 所定義的 access file 引用相同的限制
  2. authz_module_name 是用來設定, 這個 trac project 所使用的 repository name

一般來講在只有一個 project 的情況下是不需要設 authz_module_name 的,
但 svn 在管理多個 repositories 的 acl 的時候, 用了 [repository name:path] 的格式
來定義各別 repository 的存取權, 因此為了讓 trac 能明白自己所使用的 repository name 因此要再定義此項設定
否則存取權的設定結果可能不會如你所預期的運作

有關 SVN Access FILE 的設定說明可以參考此處:

  1. Bug’s Living Diary – Subversion Authentication with LDAP and access control using apache 2.2
  2. Svnbook – HttpD Authz PerDir
  3. Svnbook – Path based Authz

有關 Trac 設定的參考文獻如下:

  1. Bug’s Living Diary – Trac + Apache + LDAP at FreeBSD 7
  2. Trac – TracPythonMod
  3. Trac – TracFineGrainedPermissions
  4. Trac – TracIni

Filed under: 蟲的研究心得

Leave a Reply

Author

參觀人數

  • 19,615 人次

Flickr 相簿

DSCN1635

More Photos