
そこで、今日サーバーのメンテナンスを行っていたところ、ホーム ディレクトリ内の 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]$
-rw-r--r--
私の質問は、 root ではないのに、root が所有し、権限を持つファイルをどうやって削除できたのかということです。
答え1
権限、コンテンツ、およびすべての属性は、inode の一部です。名前はディレクトリ エントリにあります。権限は再帰的に継承されません (Posix ACL で default を使用する場合を除く)。
ファイルを削除すると、内部的にはディレクトリ エントリから inode へのハード リンクが削除されます。すべてのハード リンクが削除され、inode が使用されていない場合は、ファイル システムがスペースを再利用します。ファイルに設定されている権限に関係なく、フォルダーに対する書き込み権限のみが必要です (変更不可の ext 権限を除く)。空のフォルダーの場合も同様です。
空でないフォルダーを削除する場合は、削除するフォルダーとその親フォルダーに対する書き込み権限が必要です。
答え2
ディレクトリを所有している場合は、ディレクトリの権限に基づいて、ディレクトリとその中のコンテンツに対して何でも行うことができます。したがって、ファイルを所有していなくても、ファイルが存在するディレクトリに対する読み取り/書き込み権限があったため、ファイルを削除することができました。