
このchown
コマンドをrootユーザーだけが使用できるのはなぜですか? root以外のユーザーがchownを使用して自分が所有するファイルを削除できないのはなぜですか?
答え1
ほとんどのUnixシステムは、ユーザーがファイルを「漏洩」するのを防ぎます。つまり、chown
ターゲットユーザーとグループの権限がある場合にのみファイルを実行できます。使用chown
するにはファイルを所有またはルートにする必要があるため(ユーザーは他のユーザーのファイルを占有できません)、ルートのみがchown
ファイル所有者を別のユーザーに変更できます。
この制限を適用する理由は、他のユーザーにファイルを提供することはまれですが、依然として重要な状況で悪いことが発生する可能性があるためです。たとえば、
- システムでディスククォータが有効になっている場合、Aliceは自分がアクセスできるディレクトリに誰でも書き込み可能なファイルを作成し(他の人は誰にもアクセスできません)、他のユーザーにファイルを
chown
所有させることができます。あります。請求書。 Aliceだけがファイルを使用できますが、そのファイルはBillのディスククォータに含まれます。 - アリスがビルにファイルを渡すと、ビルがファイルを生成しなかったという兆候はありません。ファイルに違法なデータや有害なデータが含まれていると、問題になる可能性があります。
- 一部のプログラムでは、要求を検証するために入力ファイルが特定のユーザーに属している必要があります(たとえば、ファイルにはプログラムがそのユーザーの代わりに実行するいくつかの指示が含まれています)。 Billが構文的に正しい指示を含むファイルを生成しても、この特定の時間にそのコマンドを実行する意図がない可能性があるため、これは通常安全な設計ではありません。しかし、AliceがBillへの入力としてランダムなコンテンツを含むファイルを生成することを許可すると、状況はさらに悪化します。
答え2
Linuxでは、chownを実行するにはCAP_CHOWN機能が必要です。ルートにはそのような権限が与えられます。引用: http://vouters.dyndns.org/tima/Linux-OpenVMS-C-Implementing_chown.html 説明のために。 CAP_CHOWN 機能を提供する場合は、次のように libcap-ng または libcap を使用してコードをビルドします。 http://vouters.dyndns.org/tima/Linux-PAM-C-Pluggable_Authentication_Modules_programming_example.html CAP_AUDIT_WRITEをCAP_CHOWNに置き換えます。
答え3
コマンドを実行できますが、ルートではない場合は機能しません。簡単です。ソフトウェアをrootに変更できるユーザーを想像してください。 setuidビットを追加するとチャジャン、この人がルートです!したがって、ユーザーはchmodを使用してビットを追加できますが、ファイル所有者を変更する機会はありません。