切断/削除を拒否するキャッシュディレクトリを作成することは可能ですか?

切断/削除を拒否するキャッシュディレクトリを作成することは可能ですか?

ダウンロード後に絶対に変更されないファイルを格納するキャッシュディレクトリがあります。ただし、このキャッシュディレクトリを使用するプログラムはキャッシュからファイルを削除します。拒否されたrwディレクトリを作成するためのメカニズム(例:回路ブロック/バインディングオプション)はありますかunlink

ベストアンサー1

これらの機能は、一部のファイルシステムのLinuxで実装されています。追加モード属性。この属性は、次のユーザーのみが使用できます。ユーザー(または十分に能力がある)。 ~からchattr:

プロパティ

「a」属性が設定されているファイルは、次の場所でのみ開くことができます。追加モード書くために。スーパーユーザーまたはCAP_LINUX_IMMUTABLE機能を持つプロセスのみがこのプロパティを設定または消去できます。

実際に明示的に説明しなくても、これはディレクトリに影響します。ファイルをディレクトリに追加(またはリンク)できますが、削除または名前変更することはできません。

少なくとも属性がサポートされます。外部4xfsそしてBTFS(しかし、例えばそうではありません。一時ファイルシステム)ファイルシステム。

完全な例。正常な行動:

$ mkdir mytest
$ echo 1 > mytest/foo
$ mv mytest/foo mytest/bar
$ echo 2 > mytest/foo
$ rm mytest/foo

これでプロパティが設定されました。

$ sudo chattr +a mytest
$ echo 3 > mytest/foo
$ rm mytest/foo
rm: cannot remove 'mytest/foo': Operation not permitted
$ rm mytest/bar
rm: cannot remove 'mytest/bar': Operation not permitted
$ mv mytest/foo mytest/baz
mv: cannot move 'mytest/foo' to 'mytest/baz': Operation not permitted

ファイルは受信されないため、ファイル自体には影響しません。追加モード属性自体:

$ echo 4 >> mytest/foo
$ echo 5 >> mytest/bar
$ cat mytest/foo
3
4
$ cat mytest/bar
1
5

それでも切り取ることができます。

$ : > mytest/foo
$ cat mytest/foo
$

または他の場所への接続/接続解除:

$ mkdir mytest2
$ ln mytest/foo mytest2/foo
$ rm mytest2/foo
$ 

適用される制限を削除する唯一の方法は次のとおりです。削除追加のみプロパティとchattr -a mytest

おすすめ記事