Sco*_*lby 7 directory debian chmod setgid
chmod
在取消设置 setgid 位时,我刚刚注意到一些有趣的行为:
$ mkdir test
$ chmod 2755 test
$ stat -c '%a %n' test
2755 test # as expected
$ chmod 0755 test
$ stat -c '%a %n' test
2755 test # what? see below
$ chmod 00755 test
$ stat -c '%a %n' test
755 test # double what?!
Run Code Online (Sandbox Code Playgroud)
尝试取消设置 setgid 位chmod 0755
不起作用,这令人惊讶。但是,手册页表明这是预期的行为:
SETUID 和 SETGID 位
如果文件的组 ID 与用户的有效组 ID 或用户的补充组 ID 之一不匹配,则 chmod 清除常规文件的 set-group-ID 位,除非用户具有适当的权限。其他限制可能会导致 MODE 或 RFILE 的 set-user-ID 和 set-group-ID 位被忽略。此行为取决于底层 chmod 系统调用的策略和功能。如有疑问,请检查底层系统行为。
除非您明确指定,否则 chmod 会保留目录的 set-user-ID 和 set-group-ID 位。您可以使用 u+s 和 gs 等符号模式设置或清除位,并且可以使用数字模式设置(但不清除)这些位。
(强调)
所以它似乎chmod 0755
并不意味着取消 setgid 位。但是,为什么要chmod 00755
取消设置呢?数字模式的五位数字chmod
似乎没有任何用处。再次从手册页:
数字模式是从一到四个八进制数字 (0-7),通过将值 4、2 和 1 的位相加得出。假定省略的数字是前导零。
(强调)
这里发生了什么?为什么会chmod
决定忽略单个前导 0?为什么它不忽略两个前导 0?
(Debian Stretch 9.1,带有 chmod (GNU Coreutils) 8.6)
我找到了!手册页中缺少此信息,但在 Coreutils 在线手册中。以机智:
在大多数系统上,如果设置了目录的 set-group-ID 位,则新创建的子文件继承与目录相同的组,新创建的子目录继承父目录的 set-group-ID 位。在一些系统上,目录的 set-user-ID 位对新子文件的所有权和新子目录的 set-user-ID 位具有类似的影响。通过减少使用
chmod
或chown
共享新文件的需要,这些机制使用户可以更轻松地共享文件。这些便利机制依赖于目录的 set-user-ID 和 set-group-ID 位。如果命令喜欢
chmod
并mkdir
定期清除目录上的这些位,则该机制将不那么方便并且更难以共享文件。因此,像chmod
这样的命令不会影响目录的 set-user-ID 或 set-group-ID 位,除非用户在符号模式下特别提及它们,或者使用运算符数字模式,例如“=755”,或设置以数字模式清除它们,或以具有五个或更多八进制数字的数字模式清除它们。
参考:https : //www.gnu.org/software/coreutils/manual/html_node/Directory-Setuid-and-Setgid.html
归档时间: |
|
查看次数: |
1691 次 |
最近记录: |