在CentOS服務器上配有一個SVN,環境中有SVN自有協議和HTTP協議配置了同時訪問,
SVN協議下的控制是大家都瞭解的passwd(配置用戶信息)和authz(配置組信息和訪問權限)文件,
HTTP則使用LDAP來訪問用戶信息。
因爲LDAP管理略有不便,所以打算將HTTP切換成和SVN的passwd的相同用戶表。
但是卻總是無法成功,總是反覆提示重新填寫帳號,apache的日誌裏則提示Not found xxxx User錯誤。
經過數小時才發現,是一個簡單卻容易麻痹的問題引起的。
最初httpd下使用配置文件如下,用戶文件和權限控制文件都直接指向SVN本身的文件,看起來沒有什麼問題。
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
<Location /svn>
DAV svn
SVNParentPath /data/svn/
AuthType Basic
AuthName "Subversion User"
AuthUserFile /data/svn/passwd
AuthzSVNAccessFile /data/svn/authz
Require valid-user
</Location>
問題出在passwd文件上,SVN自身控制的passwd文件格式是如下這樣以等號分隔:
user1=1
user2=1
但是,httpd的svn模塊所要的passwd文件(AuthUserFile),其格式是用冒號分隔,且不允許直接使用明文,
(一般用htpasswd命令生成),如下:
user1:HjkY1IjiKmJw.
user2:sLWo8TMiVEA6o
格式不對,自然會出現找不到用戶的現象,用htpasswd新建AuthUserFile文件後後一切正常。
但與此同時,authz的格式則是完全通用的,這一點最是讓人迷惑(原來用ldap發現不了這個問題)。
passwd文件不同,從這個意義上來說svn協議訪問和http訪問其實是並無關聯的2套體系,
只不過部分配置如authz等可以共用。(倉庫本身的文件訪問權限是另外一回事)