整合 Subversion、Apache 與 Active Directory 
在
實作 Subversion 檔案庫自動備份機制 一文中曾經介紹了如何對 Subversion 檔案庫進行自動備份,也在同一篇文章中介紹了如何讓 Subversion 多檔案庫之間共用同一份設定檔的方式。又鑑於日前已成功
整合 Apache 與微軟 Active Directory 進行身份認證,那麼把 Subversion 一併整合到 Apache 下並使用 AD 進行身份認證似乎是個不得不的決定?
不過,在進行這個移轉作業前有個影響必須瞭解:
存取設定檔必須重新設定 ,這是因為透過 HTTP 協定存取 Subversion 時會有和 SVN 協定有個不一樣的路徑設定,此部份容後再談。
在此先複習一下
實作 Subversion 檔案庫自動備份機制 的檔案庫設定。該文將所有的檔案庫分成兩大類分別依性質建置於 docs/ 或 projects/ 目錄下,而這兩個目錄則共存於 /home/svn 下,其 owner 為 svn 。
svn@myhost ~ $ tree -L 2 /home/svn
/home/svn
|-- authz
|-- commit.log
|-- docs
| |-- resume
| `-- svntest
|-- initRepos.sh
|-- passwd
|-- projects
| |-- adsl
| |-- perl
| `-- scripts
|-- svnBackup.sh
`-- svnserve.conf8 directories, 5 files
這邊有幾個重要資訊:
- /home/svn/docs 及 /home/svn/projects 是檔案庫的 Parent Path ,而 docs/ 及 projects/ 則為 Apache 的第一層目錄。
- Subversion 原本的存取權限設定檔為 /home/svn/authz,這部份沒有改變。
整個驗證重點
疑似 如下:
- Apache 檢測指定網址必須進行 LDAP 認證
- Subversion 透過 Apache 的認證結果決定是否可存取相關檔案
設定 Apache 使用 LDAP 進行身份驗證
指定 Apache 透過 LDAP 進行身份驗證的詳細說明請參考
Apache 整合微軟 Active Directory 做身份認證 一文之說明,完整設定如后,說明如下:
- 與 LDAP 有關之設定可直接登錄在 /etc/httpd/conf.d/authz_ldap.conf 下。
- /docs 及 /projects 網址目錄將分別對應到 /home/svn/docs 及 /home/svn/projects 下之所有檔案庫。
<Location /docs>
AuthzLDAPMethod ldap
AuthzLDAPAuthoritative on
AuthzLDAPServer ads.company.net.tw:389
AuthzLDAPUserBase "OU=單位名稱,OU=使用者帳號,DC=company,DC=net,DC=tw" AuthzLDAPUserKey sAMAccountName
AuthzLDAPUserScope subtree
AuthzLDAPBindDN ldap@company.net.tw
AuthzLDAPBindPassword ldapPassword
</Location><Location /projects>
AuthzLDAPMethod ldap
AuthzLDAPAuthoritative on
AuthzLDAPServer ads.company.net.tw:389
AuthzLDAPUserBase "OU=單位名稱,OU=使用者帳號,DC=company,DC=net,DC=tw" AuthzLDAPUserKey sAMAccountName
AuthzLDAPUserScope subtree
AuthzLDAPBindDN ldap@company.net.tw
AuthzLDAPBindPassword ldapPassword
</Location>
設定 Apache 啟用 Subversion WebDav 模組
- 與 Subversion 有關的設定統一放置於 /etc/httpd/conf.d/subversion.conf 檔案中。
- Apache 須透過 mod_dav_svn 模組與 Subversion 配合,故安裝之。
yum install -y mod_dav_svn
- 在指定網址目錄上啟用 WebDav 支援,如後述。
- 調整 /home/svn 下檔案庫的擁有者屬性,如下例:
chown -R svn:apache /home/svn
- 確保 Apache 擁有可以寫入檔案庫的權限,如下例:
chmod -R g+rwx /home/svn/docs; chmod -R g+rwx /home/svn/projects
- 重新啟動 Apache 並檢視可否瀏覽檔案庫內容。
<Location /docs>
# 啟用 SVN WebDav 支援
DAV svn
# 檔案庫目錄所在目錄
SVNParentPath /home/svn/docs
# 是否可瀏覽檔案庫目錄所在目錄,等於可否瀏覽所轄檔案庫
SVNListParentPath on
# 存取權限設定,指定此參數會讓 SVNListParentPath 失效
#AuthzSVNAccessFile /home/svn/authz
# 基本認證模式
AuthType Basic
# 視窗提示訊息
AuthName "Version Control System - Documents"
# 通過驗證都才能瀏覽此目錄
require valid-user
</Location><Location /projects>
DAV svn
SVNParentPath /home/svn/projects
SVNListParentPath on #AuthzSVNAccessFile /home/svn/authz AuthType Basic
AuthName "Version Control System - Projects"
require valid-user
</Location>
Subversion 存取權限設定說明
網路上有『使用 LDAP 驗證機制後,即無法對檔案目錄進行控管』的說法,對於此點個人認為可能有所誤會。
系統管理者仍然可以在 Apache 設定檔中透過 AuthzSVNAccessFile 指定 Subversion 存取設定檔,只是一旦設定此屬性後 SVNListParentPath 的設定將自動變成 off。
另外對於 /home/svn/authz 檔的設定方式也有所改變,原本指定檔案庫的方式為 [projects/perl:/],但改用 Apache 配合 WebDav 時則變成 [perl:/] ,整個設定範例如下:
[perl:/]
ada = rw
asa = rw[adsl:/]
ada = rw
asa = rw