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、およびスティッキービットを含むディレクトリがあります。次に実行すると、sgidchmod u=rwx {dirname}chmod g=rwx {dirname}suidはまだ開いています。しかし、chmod o=rwxスティッキービット除去を実行すると。なぜこれが起こるのかを説明できる人はいますか?

ベストアンサー1

man chmodDebian 10 から:

ディレクトリの場合、chmod は明示的に別のビットを指定しない限り、set-user-ID および set-group-ID ビットを保持します。u+sアンパサンドやその他の符号モードを使用して、これらのビットを設定または消去できますg-s。数値モードを持つディレクトリに対してこれらのビットをクリアするには、追加の先行ゼロが必要です00755=755

粘着性のあるビットについては、そのような明示的な保証は行われません。したがって、動作は文書と一致します。

なぜchmodこのように設計されたのかは、より難しい質問です。

これは、ユーザーID設定またはグループIDビット設定追加の許可そしてディレクトリの固定ビットのため追加の制限:suid / sgidビットがディレクトリから誤って削除された場合、ユーザーはそのビットを再配置できず(たとえば、ユーザーが所有するディレクトリとユーザーがメンバーではないグループ)、要求する必要があります。システム管理者の助けを借りても、粘着性がある場合、ユーザーは必要に応じて簡単にオンにすることができます。

おすすめ記事