为什么 chmod o=rwx 删除粘性位,而 chmod u=rwx 和 chmod g=rwx 不删除 suid 和 sgid?

为什么 chmod o=rwx 删除粘性位,而 chmod u=rwx 和 chmod g=rwx 不删除 suid 和 sgid?

我的命令有问题chmod。我有一个带有 sgid、suid 和粘性位的目录。如果我然后运行chmod u=rwx {dirname},或者chmod g=rwx {dirname}sgid 和 suid 仍然打开。但如果我运行chmod o=rwx粘性位删除。谁能解释为什么会发生?

答案1

man chmodDebian 10 开始:

对于目录,chmod 保留 set-user-ID 和 set-group-ID 位,除非您明确指定其他位。您可以使用u+s和等符号模式设置或清除这些位g-s。要清除具有数字模式的目录的这些位,需要额外的前导零,或前导 = like 00755,或=755

对于粘性位没有做出这样的明确保证。所以行为与文档相符。

为什么chmod要设计成这样是一个更困难的问题。

这可能是因为设置用户 ID 或设置组 ID 位可能授予额外特权而目录上的粘滞位会导致进一步限制:如果 suid/sgid 位被意外地从目录中删除,用户可能无法将它们重新放回(例如,用户拥有的目录和用户不是其成员的组),并且可能需要请求系统管理员帮助;但对于粘性位,用户可以根据需要简单地将其重新打开。

相关内容