进入禁止;SVN 与 Apache 和 LDAP

进入禁止;SVN 与 Apache 和 LDAP

我正在 CentOS VM 上设置 SVN 服务器。https://192.168.0.5:443/svn/ReposXX/trunk例如,我想要实现的是端口 443 上的 SVN 服务器,其中有多个存储库可通过地址访问。网络运行正常。新服务器在 上是静态的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

我一直在关注各处的各种操作方法和教程,它们都以略微不同的方式进行操作,而且似乎都不完整。

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),而当我使用正确的 URL 时,这一事实forbidden告诉我,至少其中有一部分是可行的。

到目前为止的配置如下...

/etc/httpd/conf/httpd.conf我更新了 中的行ServerName 192.168.0.5:443。我删除了所有语句,因为中Listen有一行。Listen 443ssl.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 "[email protected]"
      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 存储库,因此之前是全新安装的,并且不会添加任何其他内容。

我按照在线指南生成了证书……

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

我试图将权限更改为wwwwww-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

答案1

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,这可能是一个好主意。

相关内容