我工作有两台机器一台是 Win7,专职开发用;另一台老的 XP,专门用来做一些杂七杂八的事情比如收发邮件、听歌等。前段时间在上面把 CVS 服务起起来,成为了一台私用的 CVS 服务器就想自己和组内的人用用其实一直只有自己在用,什么问题都没有。

最近,小查一直在搞一个项目,我说把它放到我的CVS服务器上来吧,方便维护于是昨天我就把它放了上去,用的是我的域帐户。小查兴冲冲的 checkout 之后,发现不能 checkin,报「Permission denied」…

我为什么一直都没问题呢,很简单,因为我用的是我的域用户。

查了很久,发现 CVS 有两种用户验证机制,跟 SQL 一样:系统验证和 CVS 用户验证。

很明显,我用的是系统验证,因为我们的机器都加入域的,所以只要能登录到我的机器的用户,都可以成功验证 CVS。当时配置 CVS 服务器的时候就很简单全部默认就搞定了。很简单:

于是我就想,肯定是因为域用户在我的机器上没有写权限于是导致的小查不能 checkin,但转念一想,不对啊,域用户并没有跟 XP 绑定,我的帐户怎么可以写呢?于是用他的帐户添加了一个文件,可以;再修改,可以;再删除,可以…

看来是他的帐户对我的帐户创建的文件没有写权限…

难道需要我创建 CVS 帐户?太麻烦了,我就想要一个简单的 CVS,不需要有太多的权限控制,只需要域用户就可以了。再看了一下 CVS 服务器上的「文件属性 - 安全」:

域用户是创建这个文件的用户,他拥有对该文件的完全控制;本地用户是登录到这台机器的用户,通常是 Administrator 角色。注意那个「Users」,没有写权限!

Windows 的权限有继承,于是我去看了 cvsroot 目录的权限它的「Users」也是不能写,于是我把它下面的所有权限都开了让小查试了一下,果然就 OK 了。