禁止訪問 <url>;帶有 Apache 和 LDAP 的 SVN
我正在 CentOS VM 上設置 SVN 伺服器。例如,我想要實現的是埠 443 上的 SVN 伺服器,其中多個儲存庫可在一個地址訪問
https://192.168.0.5:443/svn/ReposXX/trunk
。網路工作正常。新伺服器在192.168.0.5
. 我正在嘗試簽出一個儲存庫作為第一個測試,但我似乎無法讓它工作。我總是被“禁止”(下面有更多細節!)。[root@svn svn]# uname -a Linux svn 2.6.32-358.el6.x86_64 #1 SMP Fri Feb 22 00:31:26 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux [root@svn svn]# ping google.com PING google.com (173.194.46.72) 56(84) bytes of data. 64 bytes from ord08s11-in-f8.1e100.net (173.194.46.72): icmp_seq=1 ttl=56 time=31.6 ms
svn 儲存庫位於
/var/www/svn/svn/
. 裡面的所有文件夾/儲存庫都屬於apache.apache
並擁有664
權限。[root@svn svn]# pwd /var/www/svn/svn [root@svn svn]# ls -la total 68 drw-rw-r--. 17 apache apache 4096 Nov 28 19:05 . drwxr-xr-x. 3 root root 4096 Nov 29 16:20 .. drw-rw-r--. 7 apache apache 4096 Nov 28 18:38 Repos01 drw-rw-r--. 7 apache apache 4096 Nov 28 18:29 Repos02 drw-rw-r--. 7 apache apache 4096 Nov 28 18:47 Repos03 ... 15 in total
我一直在到處關注各種howtos和教程,他們都以略有不同的方式製作東西,而且似乎沒有一個是完整的。
me@My-PC:~/SVN_TEST$ svn co https://192.168.0.5:443/random/Repos01/trunk/ Repos01 svn: OPTIONS of 'https://192.168.0.5:443/random/Repos01/trunk': 200 OK (https://192.168.100.5) me@My-PC:~/SVN_TEST$ svn co https://192.168.0.5:443/svn/Repos01/trunk/ Repos01 svn: access to 'https://192.168.0.5:443/svn/Repos01/trunk' forbidden
200 OK
當我使用錯誤的 URL 時,我得到(錯誤的 URL)的事實forbidden
告訴我,我至少有一部分在工作。所以這裡是到目前為止的配置……
在
/etc/httpd/conf/httpd.conf
我更新了行ServerName 192.168.0.5:443
。我刪除了任何聲明,Listen
因為Listen 443
.ssl.conf
以下是 的內容
/etc/httpd/conf.d/subversion.conf
:LoadModule dav_svn_module modules/mod_dav_svn.so LoadModule authz_svn_module modules/mod_authz_svn.so # SSL certificate location #SSLEnable SSLEngine on SSLCertificateFile /etc/pki/tls/certs/public.crt SSLCertificateKeyFile /etc/pki/tls/private/private.pem <Location /svn> DAV svn SVNParentPath /var/www/svn/svn # Limit write permission to list of valid users. <LimitExcept GET PROPFIND OPTIONS REPORT> # Require SSL connection for password protection. SSLRequireSSL AuthzSVNAccessFile /etc/svn_access_file AuthType Basic AuthName "Subversion repos" AuthBasicProvider ldap AuthLDAPURL ldap://192.168.0.3:389/OU=CORP,DC=domCORP,DC=local?sAMAccountName?sub?(objectClass=*) AuthzLDAPAuthoritative on AuthLDAPBindDN "me@domCORP.local" AuthLDAPBindPassword "mypass" # Require ldap-group Users # AuthUserFile /etc/svn_auth_file AuthLDAPGroupAttributeIsDN off Require valid-user </LimitExcept> </Location>
我用它測試了 LDAP 參數,
ldapsearch
它似乎工作正常。我希望 LDAP 負責身份驗證,並svn_access_file
負責訪問管理(這就是我註釋掉的原因svn_auth_file
)。我在防火牆中添加了一條規則,讓 443 通過。
-A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
高於第一
REJECT
條規則。伺服器的唯一目的是為 SVN 儲存庫提供服務,因此之前是全新安裝的,不會添加任何其他內容。
我按照howto online生成了證書…
openssl genrsa -des3 -out private.key 2048 openssl rsa -in -key private.key -out private.pem openssl req -new -key private.key -out request.csr openssl x509 -req -days 1000 -in request.csr -signKey private.key -out public.key cp public.crt /etc/pki/tls/certs/public.crt cp private.key /etc/pki/tls/private/private.key cp private.pem /etc/pki/tls/private/private.pem
如果我提供太多或不相關的資訊,我很抱歉……試圖表明我試圖讓它發揮作用。
我還嘗試使用 TortoiseSVN 從 Windows 機器上結帳。它要求我接受證書,然後以
Access to 'https://192.168.0.5/svn/Repos01/trunk' forbidden
.所以,在 Linux 和 Windows 上,它不要求任何登錄//密碼,只是告訴我這是被禁止的。
非常感謝您對此的任何幫助。
2013-11-30 昨天以來的事態發展
我更加關注日誌,並且可以使事情略有進展。看著
/var/log/httpd/ssl_error_log
,我固定Can't open file '/etc/svn_access_file': Permission denied.
這導致
Can't open file '/var/www/svn/svn/ReposXX/format': Permission denied
我認為 SELinux 可能會妨礙我,所以我做了
chcon -R -h -t httpd_sys_content_t /var/www/svn/svn
但這沒有幫助。然後我完全停用了 SELinux,以確保它不再是問題的一部分。
我試圖將權限更改為
www
orwww-data
,但這些使用者甚至不存在……所以我沒有打擾並離開了apache.apache
。我還在某處找到了這些行來設置文件和目錄權限:
find /var/www/svn/ -type f -exec chmod 660 {} \; find /var/www/svn/ -type d -exec chmod 2770 {} \;
也沒有幫助。這就是我所在的地方。我仍然
format
在ssl_error_log
.
svn 書說:
請確保在定義新位置時,它不會與其他導出的位置重疊。例如,如果您的主 DocumentRoot 導出到 /www,則不要將 Subversion 儲存庫導出到 . 如果對 URI /www/repos/foo.c 的請求進入,Apache 將不知道是否在 DocumentRoot 中查找文件 repos/foo.c,或者是否委託 mod_dav_svn 從 Subversion 返回 foo.c儲存庫。結果通常是來自表單 301 Moved Permanently 的伺服器的錯誤。
建議在 /var/www 之外安裝 repos,因為 Apache 預設配置已經定義了 DocumentRoot 上的權限,這可能與 svn 配置重疊。
如果您嘗試將您的 repos 目錄移到 /var/www 之外並相應地重新配置 Apache,也許這是一個好主意。