web-dev-qa-db-ja.com

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

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

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

[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]$

私の質問は、私がrootではないのに、rootが所有し、権限-rw-r--r--を持つファイルをどのように削除できたのですか?

41
Carl Bennett

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

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

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

35

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

19
inetknght