我的命令有问题chmod
。我有一个带有 sgid、suid 和粘性位的目录。如果我然后运行chmod u=rwx {dirname}
,或者chmod g=rwx {dirname}
sgid 和 suid 仍然打开。但如果我运行chmod o=rwx
粘性位删除。谁能解释为什么会发生?
答案1
从man chmod
Debian 10 开始:
对于目录,chmod 保留 set-user-ID 和 set-group-ID 位,除非您明确指定其他位。您可以使用
u+s
和等符号模式设置或清除这些位g-s
。要清除具有数字模式的目录的这些位,需要额外的前导零,或前导 = like00755
,或=755
对于粘性位没有做出这样的明确保证。所以行为与文档相符。
为什么chmod
要设计成这样是一个更困难的问题。
这可能是因为设置用户 ID 或设置组 ID 位可能授予额外特权而目录上的粘滞位会导致进一步限制:如果 suid/sgid 位被意外地从目录中删除,用户可能无法将它们重新放回(例如,用户拥有的目录和用户不是其成员的组),并且可能需要请求系统管理员帮助;但对于粘性位,用户可以根据需要简单地将其重新打开。