推荐给好友 上一篇 | 下一篇

认证和匿名认证的苦恼

最近第一次使用Subversion路径为基础的授权模型,结果是并没有比我计划的更琐碎,因为我使用允许匿名用户访问的版本库。事情开始很正常 - 我从《使用Subversion进行版本控制》拷贝和粘贴了httpd.cong文件和授权(authz)文件的内容,并根据我的需要修改,我以为我做出了完美的配置,我错了。

就像我,我希望配置版本库允许匿名的访问大部分内容,认证读其他部分。你已经有了一个Apache的htpasswd文件,包含写入者的用户名和密码,你配置Apache使用htpasswd文件,并且使用authz文件,然后你在authz文件中添加一些内容:

[groups]
writers = someuser1, someuser2, …

[repository:/]
* = r
@writers = rw

[repository:/trunk/private-area]
* =
@writers = rw

有一个组包含写入者的用户名,有一个规则将匿名访问赋给全世界,只对writer赋予写权限,然后通过删除读权限来禁止非授权用户在版本库私有区域的读访问,看起来很不错。

然后开始测试。

根据从版本库的/trunk目录的检出,匿名用户得到了期待的目录树,没有包含/trunk/private-area目录。

但是对于认证用户writers会发生什么?这是在说谎!没有人证用户,因为匿名用户检出了目录树,Apache不会打扰你获得认证凭证,而你无法在Apache没有询问时强制Subversion传输认证凭证。

所以,工作区是什么?

首先,你可以首先关闭所有的匿名访问,然后强制所有的非writer来分享一个如”anonymous”的用户名和一个公共密码。在你的authz 规则,用户”anonymous”只会读访问,对象是版本库的公共部分,这样工作的很好,但是对于非writer有一点不舒服,他们现在需要提供密码,尽 管不是秘密,但仍然有人不知道。

第二,你可以保留现状,然后强制用户单独检出版本库的私有区域,连接私有区域为一个工作拷贝不会有什么问题,但是还好。

第三,你可以在自己的版本库保持私有事情,对于writers,这与第二种情况非常类似,但是你的writer不能包含历史的保持私有事情。

最后,你可以在httpd.conf配置第二个<Location>,会指向不同的URL(例如,使用”-no-anon”),在这个块里,禁止匿名访问,然后再authz文件添加冗余的条目:

[repository-no-anon:/]
* =
@writers = rw

现在匿名非writers可以无需提示检出最初的版本库URL,也不会看到私有区,非匿名作者可以从另一个版本库URL检出,并能看到私有区域。(感谢Max Bowsher提供的混合工作区想法。)

原始链接

C. Michael (Mike) Pilato has been on the Subversion project as a committer since 2000. Mike is one of the co-authors of “Version Control with Subversion” and he is on the board of the non-profit Subversion Corporation.



TAG: 认证 匿名
 

评分:0

我来说两句