访问<url>禁止; SVN与Apache和LDAP

我正在CentOS虚拟机上build立一个SVN服务器。 我想要实现的是一个端口443上的SVN服务器,可以通过地址https://192.168.0.5:443/svn/ReposXX/trunk访问多个存储库。 networking工作正常。 新服务器在192.168.0.5上是静态的。 我试图结帐作为第一个testing库,我似乎无法得到它的工作。 我总是被禁止(更多细节在下面!)。

 [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 

事实上,当我使用一个错误的URL时,我得到200 OK (错误的URL),当我使用一个好的URL时forbidden告诉我,我至less有一部分工作。

所以这里是到目前为止的configuration…

/etc/httpd/conf/httpd.conf我更新了行ServerName 192.168.0.5:443 。 我删除了任何Listen语句,因为在ssl.conf有一个Listen 443行。

这里是/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 "[email protected]" AuthLDAPBindPassword "mypass" # Require ldap-group Users # AuthUserFile /etc/svn_auth_file AuthLDAPGroupAttributeIsDN off Require valid-user </LimitExcept> </Location> 

我用ldapsearchtesting了LDAP参数,它似乎工作正常。 我想LDAP负责authentication,而svn_access_file负责访问pipe理(这就是为什么我注释掉了svn_auth_file )。

我在防火墙上添加了一条规则,让443通过。

 -A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT 

高于第一个REJECT规则。

服务器的唯一目的是服务于SVN仓库,所以这是一个全新的安装之前,不会有任何其他的东西。

我生成的证书后,如何在线…

 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 

如果我提供了太多或无关的信息,我很抱歉…试图certificate我试图让它工作很多。

我也尝试从Windows机器与TortoiseSVN签出。 它要求我接受证书,然后拒绝Access to 'https://192.168.0.5/svn/Repos01/trunk' forbidden

所以,在Linux和Windows上,它不会要求任何login密码,只是告诉我,它是被禁止的。

任何帮助,这是非常感谢。

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,以确保它不再是问题的一部分。

我试图改变wwwwww-data的权利,但这些用户甚至不存在…所以我没有打扰,离开apache.apache

我还发现这些行设置文件和目录的权利:

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

也没有帮助。 那就是我所在的地方 我仍然在ssl_error_log format文件中得到错误。

该svn书指出:

确保在定义新位置时,它不会与其他导出的位置重叠。 例如,如果您的主DocumentRoot被导出到/ www,不要导出Subversion存储库。 如果URI / www / repos / foo.c有一个请求,Apache将不知道是否在DocumentRoot中查找文件repos / foo.c,或者是否委托mod_dav_svn从Subversion返回foo.c库。 结果往往是301永久移动的表单服务器的错误。

build议在/ var / www之外安装repos,因为Apache默认configuration已经定义了可能与svnconfiguration重叠的DocumentRoot权限。

如果你试图把你的repos目录移到/ var / www之外,并按照重新configurationApache的话,也许这是个好主意。