我正在使用Httpd设置SVN存储库。目前,我的存储库可以通过Httpd获得,但任何人都可以签出并提交。我想使用Microsoft Active Directory身份验证限制提交操作。
我在subversion.conf
中使用以下内容。
<Location /repos>
DAV svn
# Directory containing all repository for this path
SVNParentPath /srv/svn/repositories
# List repositories colleciton
SVNListParentPath On
# Enable WebDAV automatic versioning
SVNAutoversioning On
# Repository Display Name
SVNReposName "RepositoryName"
# Do basic password authentication in the clear
AuthType Basic
# The name of the protected area or "realm"
AuthName "RepositoryName"
# Make LDAP the authentication mechanism
AuthBasicProvider ldap
# Make LDAP authentication is final
AuthzLDAPAuthoritative off
# Active Directory requires an authenticating DN to access records
#AuthLDAPBindDN "ou=people,o=example,dc=com"
# The LDAP query URL
AuthLDAPURL "ldap://example.com:389/DC=com,DC=example,ou=people?uid(objectClass=*)" NONE
# Read access to everyone
Satisfy Any
# Require a valid user
Require valid-user
# Authorization file
AuthzSVNAccessFile /subversion/apache2/auth/repos.acl
# Limit write permission to list of valid users.
#<LimitExcept GET PROPFIND OPTIONS REPORT>
# Require SSL connection for password protection.
# SSLRequireSSL
#AuthType Basic
#AuthName "Authorization Realm"
#AuthUserFile /etc/httpd/conf/.htpasswd
#Require valid-user
#</LimitExcept>
</Location>
通过上述配置,它每次都会请求凭据。此外,提供时,存储库不可访问。在提供正确的凭据后,我收到500内部服务器错误。
我确实检查了日志文件,但没有任何内容表明实际原因。
答案 0 :(得分:6)
为了允许公开阅读/结帐,您需要取消注释<LimitExcept>
指令之间的位并注释其上方的单独Require valid-user
行。
指令<LimitExcept GET PROPFIND OPTIONS REPORT>
告诉服务器内部的所有内容都不适用于对存储库的任何GET
,PROPFIND
,OPTIONS
或REPORT
请求,用于检出/阅读回购。换句话说,如果您将这些代码放在Apache配置中,那么除了提到的方法之外,它只需要有效用户(例如,如果向PUT
请求,则需要有效用户提交):
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
</LimitExcept>
在你的情况下,它应该看起来像这样(我只是稍微修改了你发布的配置,假设除了强制登录问题之外它是正确的(我没有LDAP服务器来测试它)。注意替换{{1在example.com
到真实服务器主机中:
AuthLDAPURL
只要您将<Location /repos>
DAV svn
# Directory containing all repository for this path
SVNParentPath /srv/svn/repositories
# List repositories colleciton
SVNListParentPath On
# Enable WebDAV automatic versioning
SVNAutoversioning On
# Repository Display Name
SVNReposName "RepositoryName"
# Do basic password authentication in the clear
AuthType Basic
# The name of the protected area or "realm"
AuthName "RepositoryName"
# Make LDAP the authentication mechanism
AuthBasicProvider ldap
# Make LDAP authentication is final
AuthzLDAPAuthoritative off
# Active Directory requires an authenticating DN to access records
#AuthLDAPBindDN "ou=people,o=example,dc=com"
# The LDAP query URL
AuthLDAPURL "ldap://example.com:389/DC=com,DC=example,ou=people?uid(objectClass=*)" NONE
# Authorization file
AuthzSVNAccessFile /subversion/apache2/auth/repos.acl
# Limit write permission to list of valid users.
<LimitExcept GET PROPFIND OPTIONS REPORT>
SSLRequireSSL
Require valid-user
</LimitExcept>
</Location>
放在Require valid-user
内,一切都应该按照您的意愿运作。您可以将其余的身份验证配置放在LimitExcept
指令之间的任何位置。
答案 1 :(得分:3)
确定。我完成了第一部分。
参考6. Access control lists
部分here,我在AuthzSVNAccessFile
文件中添加了只读访问权限。
# Authorization file
AuthzSVNAccessFile /srv/svn/repos.acl
/srv/svn/repos.acl
文件的内容
[/]
* = r
现在,我的所有存储库都将匿名访问。现在提交部分仍然存在。
现在,当我提交时,我收到以下消息。
Commit failed (details follow):
Server sent unexpected return value (500 Internal Server Error) in response to
MKACTIVITY request for '/repos/project1/!svn/act/783d45f7-ae05-134d-acb0-f36c007af59d'
答案 2 :(得分:2)
我见过的每个Subversion服务器:
我认为Subversion提交过程必须是。
答案 3 :(得分:2)
我建议使用Visual SVN Server。它支持Active Directory。 Visual Svn Server安装apache和svn二进制文件。它还为apache创建了必要的conf文件。
使用您想要的功能安装它并检查它创建的apache配置文件。 另外,如果你可以在windows box中运行,我建议使用/购买它而不是维护你的apache服务器。
答案 4 :(得分:2)
只是一些注释:
SVNAutoversioning
ps -au | grep
至少一个路径的至少一个用户组必须具有写入权限AuthzSVNAccessFile
为了提交。我不知道,如何在repos.acl文件中继承AD用户名