最近第一次使用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提供的混合工作区想法。)
About the Author
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: 认证 匿名