【问题标题】:Trac not following SVN access control permissions after Apache upgradeApache 升级后 Trac 不遵循 SVN 访问控制权限
【发布时间】: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


    【解决方案1】:

    我一直在玩 svn 访问控制文件,我的 id 在 admin 组中。管理员组对顶级斜杠 (/) 目录具有 r/w 访问权限。因此,我的 id 可以访问所有存储库,因为我没有删除管理组的每个存储库中的权限。一旦我从 admin 目录中删除了我的 id,svn 和 trac 都遵循 repo 的组定义的访问权限。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-12
      • 1970-01-01
      • 2012-10-23
      • 2016-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多