下一个: , 上一个: Remote repositories, 上层: Repository


2.10 只读仓库的访问

使用口令验证服务器授予用户以只读存储仓库的访问是可能的(参阅 Password authenticated)。 (其他访问方法对只读用户没有显式支持,因为这些方法都假定(用户)必须注册访问仓库机器,并且因而用户只能做在局部文件许可权限范围内的任何事情。)

一个有只读访问的用户只能做不改变仓库的 cvs 操作,除了某些“管理”文件(例如加锁文件和历史文件)。 结合用户别名使用这个特征是相当令人满意的(参阅 Password authentication server)。

不象 cvs 的早先版本,只读用户只能读取存储仓库,而不能在服务器上执行程序或另外获得难以预料的访问级别。 准确一点说,已知的漏洞已经被堵上了。 由于这些是新特征,没有做过一个全面的安全检查,你应该使用被许可使用的安全级别。

为一位用户指定只读访问有两种方式:“包含”和“排除”。

“包含”意思是在文件 $CVSROOT/CVSROOT/readers 内列出特定的使用者的名字,这个文件是一个以简单换行符分隔的用户列表。 这里有一个简单的 readers 文件:

     melissa
     splotnik
     jrandom

(不要忘记在最后一个使用者之后的换行符。)

“排除”意指显示列出有 访问权限的每一位用户—如果文件

     $CVSROOT/CVSROOT/writers

存在,那么只有列入该文件内的用户有写访问权限,而没有列入其内的其他人只有读取访问权限(当然,即使只读权限的用户仍需被列在 cvs passwd 文件之内)。 writers 文件与 readers 文件有相同的格式。

注意:如果你的 cvs passwd 文件将 CVS 用户映射到系统用户 (参阅 Password authentication server),你要确信拒绝或允许使用 cvs 用户名而不是系统用户名来进行只读访问。 也就是说,readerswriters 文件包含有 cvs 用户名,这些用户名可以与系统用户名一致或不一致。

这里有一个关于服务器在决定是否允许只读或只写访问行为的完整描述:

如果 readers 文件存在,并且这个用户名被列在内,那么她会获得只读访问权限。 如果 writers 存在,并且用户没有被列入其中,那么她也只能获得只读访问权限(这是正确的,即使 readers 存在但用户没有被列入其中)。 否则,她将获取完全读写访问权限。

当然,如果两个文件同时记录了同一个用户,这样会发生冲突。 这种情况可以通过较为保守的方式解决,多给仓库保护总比少给保护好:此用户会获得只读访问权限。