如果 的组/some/dir
是foo
,我跑
chmod g+s /some/dir
...那么 的任何孩子/some/dir
也将有组foo
。
然而,至关重要的是,一个新的子目录/some/dir/subdir
将不是有g+s
(尽管,正如刚才所说,它的组将是foo
)。
如何保证所有后代子目录/some/dir
不仅继承组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,mountaddr=xxx.xxx.xxx.xxx,mountvers=3,mountport=333,mountproto=udp,local_lock=none,addr=xxx.xxx.xxx.xxx)
。
更新: 我现在明白了我困惑的根源:有时更改目录的组(使用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
(请注意,setgid 位最终未设置。)
正如我所说,这种情况只会发生有时。例如,如果我重复上面相同的序列,但chgrp
在 下运行命令sudo
,则该setgid
位在末尾保持设置状态。
这种对权限的影响chgrp
让我很失望。
答案1
一旦/some/dir
有 setgid 位,新的子目录做继承它,因此所有新创建的后代都有适当的组和 setgid 位。
使用chgrp
可以删除 setgid 位。POSIX 说
除非 chgrp 由具有适当权限的进程调用,否则常规文件的 set-user-ID 和 set-group-ID 位应在成功完成后清除;其他文件类型的 set-user-ID 和 set-group-ID 位可能会被清除。