web-dev-qa-db-ja.com

通常のユーザーがファイルを「chown」できないのはなぜですか?

chownコマンドがroot専用であるのはなぜですか?非rootユーザーがchownを使用して、自分が所有するファイルを配布できないのはなぜですか?

82
phleg

ほとんどのUNIXシステムでは、ユーザーがファイルを「譲渡」することはできません。つまり、ユーザーは、ターゲットユーザーとグループの権限を持っている場合にのみchownを実行できます。 chownを使用するには、ファイルを所有するかrootになる必要があるため(ユーザーは他のユーザーのファイルを適切に使用できません)、chownを実行してファイルの所有者を別のユーザーに変更できるのはrootだけです。

この制限の理由は、ファイルを他のユーザーに譲渡すると、珍しい状況でも、重大な状況が発生する可能性があるためです。例えば:

  • システムでディスククォータが有効になっている場合、Aliceは自分だけがアクセスできるディレクトリの下に誰でも書き込み可能なファイルを作成し(したがって、誰もその誰でも書き込み可能なファイルにアクセスすることはできません)、_chownを実行してそのファイルを作成します。別のユーザーBillが所有しています。そのファイルは、Aliceだけがファイルを使用できる場合でも、Billのディスククォータの下でカウントされます。
  • アリスがファイルをビルに渡した場合、ビルがそのファイルを作成しなかった痕跡はありません。これは、ファイルに不正なデータやその他の侵害データが含まれている場合に問題になる可能性があります。
  • 一部のプログラムでは、要求を認証するために入力ファイルが特定のユーザーに属している必要があります(たとえば、ファイルには、プログラムがそのユーザーに代わって実行するいくつかの指示が含まれています)。これは通常、安全な設計ではありません。ビルが構文的に正しい命令を含むファイルを作成したとしても、ビルはこの特定の時点でそれらを実行するつもりはなかったかもしれないからです。それにもかかわらず、アリスが任意のコンテンツを含むファイルを作成し、それをビルからの入力として取得することを許可すると、事態はさらに悪化するだけです。

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に単純に置き換える必要がある場合。

15
user1910461

コマンドを起動できますが、rootでない場合は機能しません。簡単です。ソフトウェアをrootユーザーに変更できるユーザーを想像してみてください。それはsetuidビットを追加することができ、そして、やっと、その人はrootです!したがって、使用によりchmodでビットを追加できますが、ファイルの所有者を変更することはできません。

0
Dom