書き込み権限なしでディレクトリにファイルを追加できるのはなぜですか?

書き込み権限なしでディレクトリにファイルを追加できるのはなぜですか?

私は最初の例を理解しています。

> mkdir foo
> chmod u-w foo
> touch foo/test
touch: cannot touch `foo/test': Permission denied
> echo "BAD" >> foo/test
bash: foo/test: Permission denied

これは意味があります。そのディレクトリに対する書き込み権限がないため、変更を書き込むことはできません。添付できるファイルに触れたり作成したりすることはできません。しかし、なぜこれが機能するのですか?

> mkdir bar
> touch bar/test
> chmod u-w bar
> echo "BAD" >> bar/test 
> cat bar/test 
BAD

答え1

このディレクトリに対する書き込み権限がありません。これは、このディレクトリを変更できないことを意味します。ディレクトリからファイルを作成または削除すると(ファイルの作成または削除、ディレクトリの内外へのファイルの移動など)、ディレクトリが変更されます。ディレクトリ内のファイルを変更しても(ファイルを追加または上書きして)、ディレクトリ自体は変更されません。

ファイルを所有している限り、ディレクトリとファイルの権限に関係なく、ファイルのメタデータ(日付、権限など)を変更できます。読み取りがファイルに対する唯一の権限であっても、ファイルを読み取ると間接的にファイルアクセス時間を変更できます。ファイルメタデータへのアクセスは権限によって制御されません。

ディレクトリ内のファイルの変更に関連するディレクトリに対する唯一の権限は実行権限です。ファイルにアクセスできるかどうかを制御します。 (ディレクトリの読み取り権限は、ディレクトリ内のファイルを一覧表示できるかどうかを制御します。読み取りは実行できますが実行できません。ファイル名は表示できますが、ファイルにアクセスできません。実行は読み取れますが読み取れません。)ファイルにアクセスできますが、名前がわかっている場合にのみディレクトリ内のファイルにアクセスできます。)ファイルにアクセスできる限り、ディレクトリの権限は重要ではありません。

ディレクトリツリー全体を読み取り専用にしたい場合は、ディレクトリの権限を変更するだけでは不可能であり、各ファイルの権限を変更する必要があります。または、読み取り専用ビューの作成

関連情報