【发布时间】:2016-08-19 20:44:04
【问题描述】:
Platform: Windows Server 2008 R2
Apache 2.2.23 (win32)/SSL 1.0.0j upgrading to Apache 2.4.23 (win32)/SSL 1.0.2h
CollabNet Subversion Client SVNServe 1.7.8
Trac 1.0.9 (win32)
Python 2.7.1
在 Windows 服务器上,在运行 Apache 2.2.23、Subversion 1.7.8 和 Trac 1.0.9 以及 mod_python 模块时,我的 Subversion 和 Trac 可以很好地交互。根据 subversion 访问控制文件中定义的访问控制组允许访问 Trac 项目。 httpd.conf 文件中 AuthzSVNAccessFile 变量的设置指向 subversion 访问控制文件,e:/etc/.svnaccess。如果用户有权访问 subversion 存储库,则他们有权访问关联的 Trac 项目,否则访问将被拒绝。
httpd.conf 文件包含以下内容:
<Location /trac>
SVNParentPath e:/svn_repository
AuthzSVNAccessFile "E:/etc/.svnaccess"
SetHandler mod_python
PythonHandler trac.web.modpython_frontend
PythonOption TracEnvParentDir e:\trac
PythonOption TracUriRoot /trac
AuthType SSPI
SSPIAuth On
SSPIOfferSSPI Off
SSPIAuthoritative On
SSPIDomain <domaincontroller>
SSPIOmitDomain Off
SSPIUsernameCase lower
SSPIPerRequestAuth On
SSPIOfferBasic On
AuthName "UTAS TRAC Login (Use domain\userid format)"
Require valid-user
</Location>
然后我不得不将 Apache/SSL 升级到 2.4.23、1.0.2h。随着这次升级,mod_python 被淘汰了,所以我不得不切换到使用 mod_wsgi 加载模块。我在 mod_wsgi.so 加载模块中添加并修改了配置文件以删除与 Python 相关的设置(保留 AuthzSVNAccessFile 设置),并添加了 mod_wsgi 信息。
Apache升级后,httpd.conf文件包含:
<Location /trac>
SVNParentPath e:/svn_repository
AuthzSVNAccessFile "E:/etc/.svnaccess"
AuthType SSPI
SSPIAuth On
SSPIOfferSSPI Off
SSPIAuthoritative On
SSPIDomain <domaincontroller>
SSPIOmitDomain Off
SSPIUsernameCase lower
SSPIPerRequestAuth On
SSPIOfferBasic On
AuthName "UTAS TRAC Login (Use domain\userid format)"
Require valid-user
</Location>
WSGIScriptAlias /trac e:/trac/trac.wsgi
<Directory "e:/trac">
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>
e:/trac/trac.wsgi 中包含以下内容:
import os
import trac.web.main
import site
site.addsitedir('e:\Python\Lib\site-packages')
os.environ['PYTHON_EGG_CACHE'] = r'c:\Trac-Python-Egg-Cache'
def application(environ, start_response):
environ['trac.env_parent_dir'] = r'e:\trac'
return trac.web.main.dispatch_request(environ, start_response)
trac.ini 文件(用于 Beth_test 项目)具有这些关键部分,与 Apache 升级之前相同:
[components]
tracopt.versioncontrol.svn.* = enabled
tracstats.* = enabled
[repositories]
Beth_test.dir = e:\svn_repository\Beth_test
Beth_test.description = This is the ‘Beth_test’ project repository on the Test svn server.
Beth_test.type = svn
Beth_test.url = https://<my_server>/svn/Beth_test
Beth_test.hidden = true
tsvn = tsvn: Interact with TortoiseSvn
[trac]
authz_file = E:\etc\.svnaccess
permission_policies = AuthzSourcePolicy, DefaultPermissionPolicy, LegacyAttachmentPolicy
permission_store = DefaultPermissionStore
repository_dir = e:\svn_repository\Beth_test
repository_type = svn
…plus a bunch of other settings
我在服务器上的目录结构是:
E:\svn_repository\
Beth_test
SVN_test
E:\trac\
Beth_test
SVN_test
当我在输入我的活动目录凭据后调出 Trac url 时,我看到列出了 2 个 Trac 项目。但是,当我单击一个项目时,即使我没有将我的 id 添加到与 subversion Beth_test repo 关联的访问控制组,它也会让我访问它。使用 TortoiseSVN 我被正确地阻止了,但是使用使用 mod_wsgi 模块的 Trac,我可以(错误地)访问 Trac 项目并随后浏览颠覆源。
Apache 或 Trac 日志文件中没有任何用处。
知道为什么 Trac 在升级 Apache 并从 mod_python 切换到 mod_wsgi 后不再遵循 subversion 访问控制权限吗?
【问题讨论】:
标签: apache svn authorization mod-wsgi trac