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