我管理一个 CVS 服务器(CentOS 6.9 上的 CVS 1.11.23,禁用 SELinux)。
我设置了设置gid位在所有存储库目录中,这一页建议,这样新的文件和目录就归该cvs
组所有,无论是谁提交的:
$ ls -al
drwxrwsr-x+ 407 root cvs 20480 Jun 19 05:34 .
drwxr-xr-x. 5 cvs cvs 4096 Nov 11 2014 ..
drwxrwsr-x+ 3 cvs cvs 4096 Aug 18 16:07 CVSROOT
drwxrwsr-x+ 20 cvs cvs 4096 Aug 18 16:00 test
但是最近开始,当有人提交时,新的目录就会被创建而没有 setgid 位(请注意最后一行中的“x”而不是“s”):
$ ls -al test
drwxrwsr-x+ 20 cvs cvs 4096 Aug 18 16:00 .
drwxrwsr-x+ 407 root cvs 20480 Jun 19 05:34 ..
drwxrwxr-x+ 2 jw cvs 4096 Aug 18 15:51 foo
结果,这些目录内添加的文件不属于该cvs
组,这会导致以后出现权限错误。
这发生在使用 pserver 和 extssh 连接方法的命令行 CVS 客户端和 Eclipse 客户端上。
什么原因导致它忽略 setgid 位?
我尝试添加一个 commitinfo 脚本来打印有关执行提交的用户的一些信息。它显示没有什么异常;umask 是 0022,所以这不会影响任何事情。