我正在 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 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 "[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,以确保它不再是问题的一部分。
我试图将权限更改为www
或www-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,这可能是一个好主意。