rmが読み取り専用ファイルを削除できるのはなぜですか?

rmが読み取り専用ファイルを削除できるのはなぜですか?

ファイルを作成してからその権限を444(読み取り専用)に変更すると、rmファイルを削除できるのはなぜですか?

私がこうすれば:

echo test > test.txt
chmod 444 test.txt
rm test.txt

...rm書き込み禁止のファイルを削除するかどうかを尋ねますtest.txt。そのようなファイルは削除できないと思って最初に削除する必要があるrmようです。chmod +w test.txtこれにより、読み取り専用であるにもかかわらずファイルが削除されますrm -f test.txtrm

誰でも明確にできますか?私はUbuntu 12.04 / bashを使用しています。

答え1

すべてのrm要件は書き込み+実行許可目次。ファイル自体に対する権限は関係ありません。

これは参考これは、権限モデルを私ができるよりもはっきりと説明します。

ファイルデータにアクセスするには読み取り権限が必要です。ファイルのデータを変更するには書き込み権限が必要です。ファイル(プログラムまたはスクリプト)を実行するには実行権限が必要です。

ディレクトリは通常のファイルとは異なる方法で使用されるため、権限はわずかに異なります(ただし少しだけ)。ディレクトリ内のファイルを一覧表示するには、ディレクトリに対する読み取り権限が必要ですが、その中のファイルに対する読み取り権限は必要ありません。 ディレクトリにファイルを追加したり、ディレクトリからファイルを削除したり、ファイル名を変更したりするには、ディレクトリへの書き込み権限が必要ですが、おそらくディレクトリ内のファイルへの書き込み権限は必要ありません。。実行権限はディレクトリには適用されません(ディレクトリはプログラムでもありません)。ただし、この許可ビットはディレクトリ内の他の目的で再利用できます。

ディレクトリに対する実行権限は、そのディレクトリにCDを挿入する必要があります(つまり、ディレクトリを現在の作業ディレクトリにする場合)。

ディレクトリ内のファイルの「inode」情報にアクセスするには、ディレクトリで実行する必要があります。ディレクトリ内のファイルのinodeを読み取るには、ディレクトリを検索するために必要です。したがって、ディレクトリに対する実行権限は検索権限とも呼ばれます。

答え2

さて、ire_and_cursesに対するあなたの意見によると、実際にやりたいことはいくつかのファイルを不変にすることです。コマンドを使用してこれを実行できますchattr。たとえば、

例えば

$ cd /tmp
$ touch immutable-file
$ sudo chattr +i immutable-file

$ rm -f immutable-file
rm: remove write-protected regular empty file `immutable-file'? y
rm: cannot remove `immutable-file': Operation not permitted

$ mv immutable-file someothername
mv: cannot move `immutable-file' to `someothername': Operation not permitted

$ echo foo > immutable-file 
-bash: immutable-file: Permission denied

変更できないファイルでは何もできません。ファイルを削除したり、編集したり、上書きしたり、名前を変更したり、chmodやchownなどの操作をすべて行うことはできません。あなたができる唯一のことは、それを読んで(Unix権限が許可する場合)(ルートとして)chattr -i不変ビットを削除することです。

すべてのファイルシステムがすべての属性をサポートしているわけではありません。 AFAIK、すべての一般的なLinuxファイルシステムは不変性をサポートしています(ext2/3/4およびxfsを含む。zfsonlinuxは現在の属性をまったくサポートしていません)

答え3

この質問に対する答えの1つは、権限がある場合にのみディレクトリからファイルを削除できると主張しています。writeこれは完全に間違っています!行ってみてください!ディレクトリにwrite権限のみを付与して削除しようとすると不可能です!
ディレクトリ内のファイルを削除するには、そのディレクトリに対するwrite権限が必要です。execute

それでは質問に戻ります。ファイルを削除するには、ディレクトリからそのinode情報を削除するだけです。つまり、ディスクからそのファイルを削除rmするわけではありません。shreddingファイルの inode 情報がアクセスできないディレクトリにない場合(親ディレクトリにリストされていないため表示できないため)、つまり削除済みあなたのため。
したがって、ディレクトリからファイルを削除するには、そのディレクトリに対する権限だけが必要です。ファイルに対する権限は関係ありません。

関連情報