web-dev-qa-db-ja.com

ファイルを削除できないようにする必要がありますが、ファイルを変更および更新できるようにします

ファイルの存在をチェックするスクリプトがあり、ファイルが存在する場合は、そこから電子メールアドレスのリストを読み取って通知を送信します。たとえば、すでに出力を監視しているときに通知する必要がない場合は、名前を変更します。他の管理者に削除してほしくないだけです。

知っている chattr +iはファイルを不変にしますが、ファイルが削除されないようにしたいだけです。 chattrプログラムは、ファイル名ではなく、iノード番号を使用して属性を追跡していると思います。

これを実現できるユーティリティはありますか?

1
user208145

「他の管理者」は悪意がありますか?彼らはあなたを捕まえるために出かけていますか?はいの場合、おそらくあなたにできることは何もありません。

そうでない場合、おそらく最も簡単な解決策は、ファイルをホームディレクトリに配置するようにスクリプトを変更することです。これのバリエーションは、異なるダイレクタのファイルへのハードリンクを作成することです。リンクを削除(リンク解除)allしない限り、ファイルはそのまま残ります。 (別のスクリプトを作成して、すべてのリンクの場所を調べ、まだ存在しているスクリプトを見つけてから、削除されたすべてのスクリプトを再リンクする必要があります。)一部のエディターはリンクを切断することに注意してください(つまり、ファイル)。

これにより、「他の管理者」が悪意を持っていたり、悪意を持っていたり、経験が浅くて徹底的でない場合でも、問題が解決する可能性があります。

または、ファイルを不変にし、スクリプトを変更して、他のテストを使用して電子メールを送信するかどうかを決定します。

「他の管理者」に関するそのコメントは、ファイルを保存するシステムに対するroot特権があることを示唆しています。権限の方法で設定できるものはすべて、同じ権限を持つ誰かによって取り消される可能性があります。

それが問題ではなく、誰も拡張特権を持っていない場合は、ファイルを/tmpまたは/var/tmpに配置するだけで、通常はtビットが設定されます(他のnondeletingからの特権ユーザー。ファイルをchmodして、グループ書き込み可能(および同じグループ内の他のユーザーが変更可能)にすることができます。

2
Thomas Dickey

[古い答えの置き換え]

ファイルへのハードリンクを作成するだけです。

ln email_file hard_link

その後、削除しても存在し、簡単に復元できます。


[問題の誤解に基づく古い答え]

1つの解決策は、スクリプト自体をchattrで不変にすることですが、名前を変更するのではなく、失う可能性のある空のファイルの有無によって、スクリプトのオンとオフを切り替えます。たとえば、snoozebuttonと呼びます。存在する場合、スクリプトは通知しません。そこにない場合、スクリプトは通知します。誰かが誤って削除した場合、そのようにすると安全に失敗します。通知が届き、snoozebuttonに何かが起こったことが通知されます。

もちろん、これはスクリプトを頻繁に変更する必要がないことを前提としています。その場合は、小さなユーティリティスクリプトでchattrを実行してからエディタを実行し、次にchattrを実行して再度ロックする必要があります。

1
Tom Zych

他のいくつかの回答で提起された点まで、mvユーティリティを使用して社会的障壁を提案することができます。

mv yourfile THIS_IS_user38537_FILE_PLEASE_DO_NOT_REMOVE
1
Jeff Schaller