如何使用 trac AuthzPolicy 来限制对存储库浏览器的访问?

How do I use trac AuthzPolicy to restrict access to repository browser?

Trac 配置了多个 subversion 存储库

http://trac.company.com/trac/browser/

REPO1 REPO2 REPO3

目前工作人员以匿名方式访问。我正在添加一个我不希望匿名用户能够看到的新存储库 UTILITIES。

这是 AuthzPolicy 的用武之地,但我真的很难让它发挥作用。

trac.ini我有

[trac]
...
permission_policies = AuthzPolicy,
  ReadonlyWikiPolicy,
  DefaultPermissionPolicy,
  LegacyAttachmentPolicy

[components]
...
tracopt.perm.authz_policy.* = enabled


[authz_policy]
authz_file = /var/trac/conf/authzpolicy.conf

但我无法弄清楚我需要在 authzpolicy.conf 中添加什么来阻止 BROWSER_VIEW 匿名。我试过(各种组合):

[*]
* = !BROWSER_VIEW
anonymous = !BROWSER_VIEW

[repository:*]
* = !BROWSER_VIEW
anonymous = !BROWSER_VIEW

[repository:UTILITIES*]
* = !BROWSER_VIEW
anonymous = !BROWSER_VIEW

我似乎没有添加任何东西,阻止匿名用户浏览任何存储库。调试日志中的相关位也没有真正说明任何问题:

2019-09-19 12:33:19,518 Trac[authz_policy] DEBUG: Parsing authz security policy /var/trac/conf/authzpolicy.conf
2019-09-19 12:33:19,519 Trac[authz_policy] DEBUG: Checking BROWSER_VIEW on repository:UTILITIES@*/source:/@68
2019-09-19 12:33:19,521 Trac[authz_policy] DEBUG: Checking BROWSER_VIEW on repository:UTILITIES@*/source:/tags@68
2019-09-19 12:33:19,523 Trac[authz_policy] DEBUG: Checking BROWSER_VIEW on repository:UTILITIES@*/source:/branches@68
2019-09-19 12:33:19,524 Trac[authz_policy] DEBUG: Checking BROWSER_VIEW on repository:UTILITIES@*/source:/trunk@68
...
2019-09-19 12:33:19,628 Trac[authz_policy] DEBUG: Checking CHANGESET_VIEW on repository:UTILITIES@*/changeset:1@*
2019-09-19 12:33:19,636 Trac[authz_policy] DEBUG: Checking CHANGESET_VIEW on repository:UTILITIES@*/changeset:68@*

如果我在 DefaultPermissionPolicy 中从匿名中删除 BROWSER_VIEW,那么即使我在 authzpolicy.conf.

中添加以下内容,也无法浏览存储库
[*]
* = *

主要问题是 /var/trac/conf/authzpolicy.conf 的权限,我需要授予网络服务器读取权限

$ chgrp apache /var/trac/conf/authzpolicy.conf
$ chmod 640 /var/trac/conf/authzpolicy.conf

一旦该问题得到解决,我开始看到基于配置的权限的不同行为,并最终想出了以下我需要的东西

[repository:UTILITIES@*]
john = BROWSER_VIEW
* = !BROWSER_VIEW

[repository:*@*]
john = !BROWSER_VIEW
* = BROWSER_VIEW

John 可以看到 UTILITIES 但不能看到其他存储库,anonymous 可以看到除 UTILITIES 之外的所有存储库。

我知道 John 可以注销并查看其他存储库。主要目的是防止匿名用户看到 UTILITIES 存储库。