ルートにならずにホームディレクトリのルートが所有するファイルを削除できたのはなぜですか?


40

そのため、今日サーバーでいくつかのメンテナンスを行っていて、ホームディレクトリのルートが所有するファイルを削除できることに気付きました。

サンプルを再現することができました:

[cbennett@nova ~/temp]$ ls -al
total 8
drwxrwxr-x.  2 cbennett cbennett 4096 Oct  5 20:59 .
drwxr-xr-x. 22 cbennett cbennett 4096 Oct  5 20:58 ..
-rw-rw-r--.  1 cbennett cbennett    0 Oct  5 20:58 my-own-file
[cbennett@nova ~/temp]$ sudo touch file-owned-by-root
[cbennett@nova ~/temp]$ ls -al
total 8
drwxrwxr-x.  2 cbennett cbennett 4096 Oct  5 21:00 .
drwxr-xr-x. 22 cbennett cbennett 4096 Oct  5 20:58 ..
-rw-r--r--.  1 root     root        0 Oct  5 21:00 file-owned-by-root
-rw-rw-r--.  1 cbennett cbennett    0 Oct  5 20:58 my-own-file
[cbennett@nova ~/temp]$ rm file-owned-by-root
rm: remove write-protected regular empty file ‘file-owned-by-root’? y
[cbennett@nova ~/temp]$ ls -al
total 8
drwxrwxr-x.  2 cbennett cbennett 4096 Oct  5 21:00 .
drwxr-xr-x. 22 cbennett cbennett 4096 Oct  5 20:58 ..
-rw-rw-r--.  1 cbennett cbennett    0 Oct  5 20:58 my-own-file
[cbennett@nova ~/temp]$

私の質問は-rw-r--r--、私はrootではないが、rootが所有し許可を持っているファイルをどのようにして削除できたのか?


6
ディレクトリへの書き込みアクセス権があるため、ファイルを指すディレクトリ内のエントリ削除できます。必ずしもファイルを削除できるわけではありません。ファイルには別の場所に別のハードリンクがある場合があります。
user253751

2
面白い拡張子:ファイルの名前を変更したり、ハードリンクを作成したりすることもできます。
ペテルはモニカを

11
現在の1が実に誤解されているので、受け入れ答えのためのあなたの選択を再考してください:あなたがしているではないために許可され、それはディレクトリの権限に基づいて、その中の内容をANTに何でもします
クトゥルフ

@Cthulhu完了!このQ&Aへのすべてのコメントをお寄せいただきありがとうございます。ここには多くの有益な情報があります。
カールベネット

回答:


34

許可、コンテンツ、およびすべての属性はiノードの一部です。名前はディレクトリエントリにあります。アクセス許可は再帰的に継承されません(Posix ACLでデフォルトを使用する場合を除く)。

ファイルを削除するとき、内部的にはディレクトリエントリからiノードへのハードリンクを削除するだけです。すべてのハードリンクが削除され、iノードが使用されていない場合、ファイルシステムはスペースを再利用します。ファイルに設定されているアクセス許可に関係なく、フォルダーに対する書き込みアクセス許可のみが必要です(不変のextアクセス許可を除く)。空のフォルダーでも同じです。

空ではないフォルダーを削除する場合、削除するフォルダーとその親に対する書き込み権限が必要です。


1
だから、アクセス許可はiノードにあるか、アクセス許可はiノードへのリンクにあり、私はそのリンクを削除するだけです(したがって、そのリンクのみが削除されるため、iノードは存在しなくなります)?
カールベネット

3
許可はiノードにあります。これは、ファイルへのハードリンクを作成し、そのアクセス許可を変更してから、元のアクセス許可を確認することで簡単に確認できます。
ウーターヴェルヘルスト

しかし、両方ともルートに属するディレクトリとファイルがあり、そのディレクトリはユーザーが所有するディレクトリにあるとします。その場合、それらを削除することはできませんよね?
njzk2

1
これは、ext2、ext3、およびext4に固有の属性です。例:sudo touch test_file;sudo chattr +i test_file;rm -f test_file参照:man chattr
Mircea Vutcovici

1
不変の属性は、ルートからの変更に対してもファイルを保護します。
ミルチャVutcovici

19

ディレクトリを所有している場合は、ディレクトリの権限に基づいて、ディレクトリとその中のコンテンツに対して何でも実行できます。したがって、ファイルを所有していないにもかかわらず、ファイルが存在するディレクトリへの読み取り/書き込み権限があるため、ファイルを削除できました。


46
ではない正確に。たとえば、OPはそのルート所有ファイルを変更できません。事は、ファイルを削除するとされていません(ファイルへのポインタを削除)ファイル上ではなく、ディレクトリの操作とみなされ、ディレクトリのパーミッションが大事理由です。
クトゥルフ

1
@Cthulhuだから、ルート所有のファイルを削除して、同じ名前で新しい変更されたファイルを作成できますか?
KDEx

3
@Morgorothはい、できますが、それはもう同じファイルではありません。別の(おそらくもっと明白な)例として、ルートに属していてその所有者だけが読み取ることができる場合、ディレクトリ内のファイルを読み取ることはできません。
クトゥルフ

@inetknghtこれを明確にする必要があります。ファイル自体をエンティティとして操作しようとしていることを理解していますが、それは明らかではありません。たとえば、その内容を変更することはできません。また、ディレクトリのアクセス許可よりも優先される属性については言及していません。
マイクS

1
@captchaこれはvi、最初にファイルを一時コピーに保存してから、元のファイルを削除し、コピーの名前を元のファイル(またはそのようなもの)に変更するためです。
クトゥルフ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.