ファイルを作成し、その権限を444
(読み取り専用)に変更した場合、rm
でファイルを削除できるのはなぜですか?
私がこれをすると:
echo test > test.txt
chmod 444 test.txt
rm test.txt
...rm
は、書き込み保護されたファイルtest.txt
を削除するかどうかを尋ねます。私はrm
がそのようなファイルを削除できないことと、最初にchmod +w test.txt
を実行する必要があると予想していました。 rm -f test.txt
を実行すると、rm
は、読み取り専用であっても、確認なしでファイルを削除します。
誰でも明確にできますか? Ubuntu 12.04/bashを使用しています。
rm
に必要なのは、親ディレクトリに対する書き込みと実行の権限だけです。ファイル自体の権限は関係ありません。
これが 参照 です。これは、アクセス許可モデルをこれまで以上に明確に説明しています。
ファイルのデータにアクセスするには、読み取り権限が必要です。ファイルのデータを変更するには、書き込み権限が必要です。ファイル(プログラムまたはスクリプト)を実行するには、実行権限が必要です...
ディレクトリは通常のファイルと同じように使用されないため、アクセス許可の動作は少し(ただし少しだけ)異なります。ディレクトリ内のファイルを一覧表示するには、ディレクトリの読み取り権限が必要ですが、その中のファイルに対する権限は必要ありません。ディレクトリへのファイルの追加、ディレクトリからのファイルの削除、またはファイル名の変更を行うには、すべてディレクトリに対する書き込み権限が必要ですが、(驚くべきことに)内部のファイルに対する権限は必要ありません。実行権限はディレクトリには適用されません(ディレクトリをプログラムにすることはできません)。しかし、その許可ビットは他の目的のディレクトリに再利用されます。
そこにcdするには(つまり、いくつかのディレクトリを現在の作業ディレクトリにするため)、実行権限がディレクトリに必要です。
実行は、ディレクトリ内でファイル内の「iノード」情報にアクセスするために必要です。これは、ディレクトリを検索して、その中のファイルのiノードを読み取るために必要です。このため、ディレクトリに対する実行権限は、多くの場合、代わりに検索権限と呼ばれます。
OK、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
は、不変ビットを削除します。
すべてのファイルシステムがすべての属性をサポートするわけではありません。私の知る限り、不変はすべての一般的なLinuxファイルシステムでサポートされています(ext2/3/4とxfsを含みます。現時点ではzfsonlinuxは属性をサポートしていません)
この質問に対する1つの回答は、write
権限のみが完全に間違っている場合にのみ、ディレクトリからファイルを削除できると主張しています。やってみなよ!ディレクトリにwrite
権限のみを与えて削除しようとすると、できません!
ディレクトリ内のファイルを削除するには、ディレクトリに対するwrite
とexecute
の両方の権限が必要です
ここで質問に戻ります。rm
を使用してファイルを削除するには、ディレクトリからiノード情報を削除するだけです。つまり、ディスクからshredding
ではありません。ファイルのiノード情報がディレクトリにない場合はアクセスできません(親ディレクトリにリストされていないため表示できないため)。つまり、deleted あなたのために。
このようにして、ディレクトリからファイルを削除すると、ディレクトリで許可されたすべての権限が与えられます。そのファイルの権限は無関係です