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


75

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


あなたの質問をchownコマンドでもroot以外のユーザーで使用することができます理解カント
harish.venkat

たぶん私はそれを間違えた。私の教授の正確な質問は、「UNIXシステムで通常のユーザーからの権利の移動が許可されないのはなぜですか?」
phleg

19
本当の問題は、非ルートユーザーが自分が所有するファイルを配布chownするために使用できない理由だと思います。(ファイルシステム構成に応じて、できるシステムを見てきました。)
キーストンプソン

回答:


96

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

この制限の理由は、ファイルを別のユーザーに配布すると、まれではあるが依然として重要な状況で悪いことが起こる可能性があるためです。例えば:

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

3
以前の仕事で、ファイルを配布できないことに依存するソフトウェアシステムを構築しました。ファイルの所有権を使用して、特定のユーザーによってリクエストが送信されたことを確認しました。インストール中に、ファイルの配布が許可されているかどうかを確認し、許可されている場合は続行を拒否しました。
キーストンプソン

2
もう1つのより重要な問題は、ユーザーがコピー/bin/bashしてsetuidし、その後chown、必要な人にコピーできることです。今、彼らはその人としてシェルにアクセスできます。
パトリック

18
@Patrickは、chown常にsetuidビットとsetgidビットをクリアします。
ジル

1
@Gillesと正当な理由...シェルバイナリをアクセスできる場所にコピーし、setuid / gidビットを設定し、ルート(または6755/0:0 permsを取得する任意の順序)にchownすることができる場合/ ownership)そのシステムのルートを取得できます。ああ、まさにパトリックのコメントを逃しました。
ハネツァー14

[OK]を、私はDIR(所有している場合drwxr-xr-x ring0 ring0 .ルートが通常のファイルを(持っている)を-rw-r--r-- root root file、なぜ私が行うことができない、)chown ring0 fileとにかくとして、行うことが許されているのでring0cp file x ; rm file ; mv x file(といくつかのオプションtouch sometime file...)?
リングØ15年

15

Linuxでは、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で。


1
+1はルートである必要はありません。あなたはもうrootである必要はないからです。
ctrl-alt-delor

1
時々、CAP_CHOWNさえ必要としない場合もあります:unix.stackexchange.com/questions/399975/…カーネルソースの私の読み取りから、各ファイルシステムの実装は、chownのパーミッションをチェックするタスクがあります。また、NFSでは、サーバー側で権限がチェックされているようです。そして、サーバーが...奇妙な...なら、それは可能です。
マイクS

0

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


12
所有していないファイルにsetuidビットを追加することはできません。また、ファイルを配布できる実装では、setuidビットをクリアできます。
ジル

Domの答えのポイントはこれだと思います:できたら想像してみてください。その後、問題が発生します。あなたができないというあなたの主張は正しい。しかし、OPは「なぜ?」setuidビットをクリアすることは、「なぜ?」という質問を繰り返すもう1つのセキュリティ機能です。次に、Domの答えを参照します。ユーザーがチャウニングでき、ユーザーがsetuidできる場合、そのコンボは悲惨なものになります。彼は少し欠けているとしても、彼は素晴らしい点を指摘していると思います。
マイクS
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.