如何确保所有新的子目录(和子目录等)都有 g+s?

kjo*_*kjo 4 permissions group

如果组/some/dirfoo,我跑

chmod g+s /some/dir
Run Code Online (Sandbox Code Playgroud)

...那么任何孩子/some/dir也会有 group foo

最重要的是,然而,一个新的子目录/some/dir/subdir不会g+s(虽然,像刚才所说的那样,其组会foo)。

如何确保所有后代子目录/some/dir不仅继承 group foo,还继承g+s权限?

FWIW,我的 umask 是002,文件系统是 nfs,根据选项mount(rw,relatime,vers=3,rsize=20961,wsize=413177,namlen=255,hard??,proto=tcp,timeo=450??,retrans=2,sec=sys,m??ountaddr=xxx.xxx.xxx??.xxx,mountvers=3,mou??ntport=333,mountprot??o=udp,local_lock=non??e,addr=xxx.xxx.xxx.x??xx).

更新: 我现在明白我的困惑的根源:有时更改目录的组(使用chgrp)会禁用以前启用的 setgid 位。例如

% rm -rf /some/dir
% mkdir -p /some/dir
% chmod g+s /some/dir
% ls -ld /some/dir
drwxrwsr-x 2 jones jones 0 Nov  7 07:13 /some/dir
% chgrp foo /some/dir
% ls -ld /some/dir
drwxrwxr-x 2 jones jones 0 Nov  7 07:13 /some/dir
Run Code Online (Sandbox Code Playgroud)

(请注意 setgid 位最终未设置。)

正如我所说,这只是偶尔发生。例如,如果我重复上述相同的序列,但我在chgrp下运行命令sudo,则该setgid位在最后保持设置。

这种chgrp对权限的影响让我失望。

Ste*_*itt 8

一旦/some/dir有setgid位,新的子目录继承它,因此,所有新创建的后代有相应的组和setgid位。

使用chgrp可以删除 setgid 位。POSIX 说

除非 chgrp 由具有适当权限的进程调用,否则常规文件的 set-user-ID 和 set-group-ID 位应在成功完成后清除;可以清除其他文件类型的 set-user-ID 和 set-group-ID 位。