非rootユーザーがrootによって作成されたファイルを削除できるのはなぜですか?


24

root以外のユーザー「joshua」を与えられ、rootとして「foo」というファイルをjoshuaのホームディレクトリ(/ home / johsua /)に作成しました。次のようになります。

-rw-r--r--  1 root   root       0 12-19 21:00 foo

そして、それをジョシュアとして削除すると、正常に削除できます。

ジョシュアには削除するのに十分な許可がないと思います。ある種の「許可の継承」ですか?私のプラットフォームはDebian 5.0.7です。


1)これはトピック外です。2)sudo他の権限昇格なしで、root以外のユーザーとしてそれを削除できたことは非常に疑わしいです。あなたはおそらく何かを見落としていました。
ダークダスト

16
@DarkDustファイルは、その親ディレクトリのエントリです。あなたがディレクトリに書き込み権限を持っている場合は(スティッキービットもディレクトリに設定されていない限り)、あなたは関係なく、ファイルの所有者のそれでファイルを削除することができます

@nos:ばかげている、あなたは正しい。
ダークダスト

1
親ディレクトリのエントリは、ファイルへの参照です。ファイル自体ではありません。(そうでなければ、どのようにしてファイルを複数のディレクトリにハードリンクできますか?)
デイビッドシュワルツ

@DavidSchwartzは本当ですが、ディレクトリからファイルを削除することは、ディレクトリ構造内の参照を削除することです。
mc0e

回答:


43

ユーザーはファイルを削除しませんでした、システムは削除しました。ユーザーは自分のディレクトリからファイルを削除しただけです。参照カウントがゼロに低下したため、システムはファイルを削除しました。ユーザーがディレクトリからファイルを削除すると、たまたま参照カウントがゼロになります。(ファイルが別のディレクトリにハードリンクされている場合、またはファイルのハンドルが開かれている場合、ファイルは削除されていません。)

参照カウントがゼロになると、システムはファイルを自動的に削除します。ファイルの所有者は関係ありません。ファイルの所有者以外の誰かがファイルの参照カウントをゼロに落とす方法はたくさんあります。

ディレクトリからファイルを削除する(「リンク解除」と呼ばれる)は、ディレクトリに対する操作です。ファイルのリンクを解除すると、参照カウントが減少します。

同様に、所有者以外のユーザーは、どのディレクトリにもリンクされていないファイルの最後のハンドルを閉じることができます。そのハンドルを閉じると、ファイルも削除されます。参照カウントが再びゼロになるためです。


1
そしてもちろん、このrmコマンドrmは「削除」の略語であり、ユーザーはrm「削除」操作と考えるように訓練されているので、少し水を汚します。多くのユーザーrmは、実際に実行する操作が「削除」ではなく「リンク解除」であることを知らずに毎日使用しています。その結果、多くのユーザーが最初に遭遇したときにこの動作が驚くことに気付くのは驚くべきことではありません。
ダニエルプライデン

それは多くの人にとって間違いなく驚くべきことです。少なくともrmコマンドは、実際にはディレクトリからファイルまたはディレクトリを削除します。コマンドが呼び出されるWindowsではdel、ファイルを削除するために使用されていましたが、最近のWindowsマシン(NT4以降)ではリンク解除操作でもあるため、さらに悪化します。
デビッドシュワルツ

「ユーザーはファイルを削除しなかった、システムは削除した」これは意味がありません。「システム」は、非特権ユーザーに代わって特権アクセスを必要とする変更を加えることはできません。そのため、この回答では、現在のディレクトリがrootのみが所有および書き込み可能な場合、同じユーザーが同じことができない理由を説明できません。以下の@kerrekによる答えは正確かつ簡潔です。
FractalSpace

@FractalSpaceえ?システムは、非特権ユーザーに代わって特権アクセスを必要とする変更を加えることができ、常にそうします。たとえば、ディスク上のバイトを変更するには特権アクセスが必要です。ただし、ユーザーがファイルを変更できる場合、システムは、ユーザーがそれらのバイトを変更する権限を持っていなくても、ディスク上のいくつかのバイトを変更することを決定します。ユーザーはカーネルメモリを変更できませんが、カーネルはユーザーに代わって実行することができます。システムは、ユーザーが直接許可できない操作を実行することを決定することによって動作します。
デビッドシュワルツ

はい。そして最終的にはすべてが「システム」によって行われます。しかし、その特定の「ユーザー空間」に設定された厳密な特権分離ルールを通過する前ではありません。このシナリオでは、たとえば、「システム」は一般的なルールとしてアクションを実行していませんが、「親ディレクトリ」に設定された権限に従っています。OPの質問におけるこの問題の重要な部分。
FractalSpace

0

最初の推測:ファイルを削除するには、含まれているフォルダーに対する書き込み権限が必要です。/ home / johsua / foo / barを試して、755をfooに、644をbarに与えます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.