Apache-2.2

禁止訪問 <url>;帶有 Apache 和 LDAP 的 SVN

  • December 1, 2013

我正在 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
&lt;Location /svn&gt;
  DAV svn
  SVNParentPath /var/www/svn/svn

  # Limit write permission to list of valid users.
  &lt;LimitExcept GET PROPFIND OPTIONS REPORT&gt;
     # 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
  &lt;/LimitExcept&gt;
&lt;/Location&gt;

我用它測試了 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,以確保它不再是問題的一部分。

我試圖將權限更改為wwwor www-data,但這些使用者甚至不存在……所以我沒有打擾並離開了apache.apache

我還在某處找到了這些行來設置文件和目錄權限:

find /var/www/svn/ -type f -exec chmod 660 {} \;
find /var/www/svn/ -type d -exec chmod 2770 {} \;

也沒有幫助。這就是我所在的地方。我仍然formatssl_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,也許這是一個好主意。

引用自:https://serverfault.com/questions/558323