権限のないユーザーがファイルの所有権を変更できないのはなぜですか?

権限のないユーザーがファイルの所有権を変更できないのはなぜですか?

chown(2)より:

特権プロセス (Linux: CAP_CHOWN 機能を持つプロセス) のみがファイルの所有者を変更できます。ファイルの所有者は、その所有者がメンバーである任意のグループにファイルのグループを変更できます。特権プロセス (Linux: CAP_CHOWN を持つプロセス) は、グループを任意に変更できます。

この制限の理由は何ですか? 権限のないユーザーは、自分が所有するファイルのファイル所有権を変更できないのはなぜですか (つまり、/etc/shadow がない)?

$ touch blah
$ chown root:root blah
chown: changing ownership of `blah': Operation not permitted

答え1

ユーザーにファイルを「配布」することを許可すると、OS のさまざまな機能に違反することになります。たとえば、

Taking up another user's disk quota.
Impersonating another user (or even root) via setuid.
Having insufficient privileges to undo a mistaken chown.
Making it appear that someone else had created a given file.
Setting up cron jobs to run on other user's accounts.
And many more...

答え2

Linuxの設計者がそれを許可しないのは個人的な選択に過ぎない。疑似セキュリティ上の理由から、与えられた、これは疑わしいものです。これを許可する UNIX システムもあるからです。

この機能は、UNIX の動作が「System-V」(AT&T) に従っているか、Berkeley の UNIX (BSD) に従っているかによって決まると思います...

言及されているその他のセキュリティ問題については、次のとおりです。

  • setuid を介して別のユーザー (または root) になりすます。

    問題なし: 「owner」を変更すると、「setXid」ビットがクリアされます (U/G)

  • 誤ったchownを元に戻す権限が不十分

    実際には「セキュリティ リスク」ではありませんが、ユーザーの変更を許可するシステムではリスクになる可能性があります。自分のディレクトリ内にある場合は元に戻すことができますが、そうでない場合は注意してください。

  • 特定のファイルを他の誰かが作成したように見せかける。

    それは、あなたが書き込み可能なディレクトリに残ります。つまり、あなたのグループまたは全員 (または ACL が使用可能な場合はあなた自身) に対して書き込みができるようにしない限り、それをホームディレクトリに移動することはできません。

  • 他のユーザーのアカウントで実行する cron ジョブを設定します。

    もう一度言いますが、動作しません。crondirはユーザーによって所有されており、読める他のユーザーによって書き込み可能になるどころか、他のユーザーによっても書き込み可能になります。

  • 誰でも所有権を変更できる場合、誰でも権限を変更してシステム上の任意のファイルにアクセスできるようになります。

    いいえ: ユーザーがそのファイルを含むディレクトリを「所有」している場合のみです。つまり、「passwd」という名前のファイルを root に渡すことはできますが、/etc/ への書き込み権限がない限り、そのファイルを /etc/ に移動することはできません。

  • 割り当て

    おそらく妥当な指摘は――もしクォータを使用していますが、ホームディレクトリごとにディスク容量を合計すると簡単に検出できそうです。唯一の問題は、複数のユーザーが書き込み可能なディレクトリの場合です。その場合は、その「ディレクトリ」の所有者で判断するとよいでしょう。5月ファイルの「譲渡」をサポートしているシステムでは、自分が「所有」しているディレクトリ内でのみこれを行うことができますが、実際にこれを許可するシステムを使用したのは随分前なので、正確な制限は覚えていません。

「ファイルの配布」を許可するには、何らかの「トレードオフ」があったように思います... たとえば、それを許可するシステムでは、Linux では許可されているが、別の何かが許可されない、などですが、それが何だったかはすぐには思い出せません...

上記の「回答」は本当の回答ではないので、回答としてマークしない方が良いと思います。これは設計上の決定であり、トレードオフが何であったかはわかりません。

上記で挙げられていないセキュリティ上の問題が正当な懸念事項である可能性もありますが、上記の問題は正当なものではありません。

私の意見では、これは「/proc」内のシステム設定可能な「値」であるべきですが、一般的に言えば、ほとんどの人はそれほど気にしないと思います。

強い必要性がある場合は、「chown」のセキュリティを強化して変更し、それを許可するようにしてから、setuid「root」を設定して、そのようなポリシーを実装できるようにすることができます。

答え3

そうですね、誰でも所有権を変更できるとしたら、誰でも権限を変更してシステム上の任意のファイルにアクセスできるようになります。これはマルウェアの観点からだけでなく (sudo は不要)、システム管理者の観点からも問題です。ユーザーがファイルを変更できると、ファイル権限は役に立たなくなります。

答え4

そうすれば、ユーザーはファイルシステムのクォータを回避できるからです。私のクォータが 100MB で、あなたのクォータが 100MB の場合、私は 100MB をアップロードし、chmod a+r を実行して、あなたを chown し、さらに 100MB をアップロードできます。

関連情報