vi、nvi、vimで重要なファイルを編集するときのファイルの回復を無効にする

vi、nvi、vimで重要なファイルを編集するときのファイルの回復を無効にする

私は、暗号化キーとパスワードを含む非常に機密性の高い情報を含む暗号化されたデータベースを維持するアプリケーションを作成しています。このアプリケーションは、memlockの使用、ptraceのブロック、コアダンプの防止などについては編集的ですが、データベース所有者がデータベースの内容を編集できるようにするコマンドがあります。このコマンドは、データベース全体を人間が読めるASCII形式の一時ファイルに書き込み、ユーザーがそれを編集できるようにします。特に、新しく作成されたディレクトリ/tmp/XXXXXXXX/(ここでは/ tmpは理想的にはメモリ内ファイルシステムです)に新しいファイルを作成し、そのファイルに対してユーザーが好むエディタを実行します。エディタが終了すると、アプリケーションはファイルの内容を解析し、そのファイルとその下の他のすべての内容を破砕し、最終的に/tmp/XXXXXXXX/ディレクトリを削除します。

残念ながら、この戦略はviバリアントではうまく機能しません。なぜなら、エディタはファイルのコピーを/var/tmp/vi.recoverに書き込んでディスクに残ることができるからです。 (データには高価な秘密鍵が含まれており、rawパーティション全体を簡単に検索できます。)これらの回復ファイルを抑制するか、少なくとも/tmp/XXXXXXXX/

私の理想的な解決策はほとんどのviバリアントで動作しますが、EDITOR環境変数を解析し、エディタごとに異なる操作を実行することもうれしいです。したがって、vimでは動作しますが、他のシステムでは動作しないソリューションがある場合、これは少なくとも良い開始です。 (私はvimがエラーが解析された正確な列番号でエディタを再び開くように特別に作成しましたが、他のviバリアントは適切な行だけを開きます。)

これは他の人に配布されるアプリケーションなので、私ができないことの1つは、問題を解決するために人々の.exrcまたは.vimrcファイルを編集することです。本当に困難な状況では、エディタを実行する前にHOME環境変数を変更し、ユーザーの実際の変数をいくつかの履歴書抑制コマンドとマージする一時的な.vimrcを作成できると思いました。しかし、私はコマンドラインやコメントの解決策を好む。

私が得ることができる最も近い最小限の作業の例は、私がemacsで実行する作業を共有することです。ファイルの末尾に次の説明を追加します。

# Local Variables:
# make-backup-files: nil
# auto-save-default: nil
# End:

最も簡単なのはコマンドラインオプションですが、それに対応するコメントがvimや他のviバリアントでも機能できる場合は良いでしょう。

修正する:

straceでいくつかの実験を行った結果、次のコマンドが出たようです。可能vimに対して私が望むことをするには:

vim -n -c 'set viminfo=' /tmp/XXX/secret.ini

--cmdただし、推奨オプションでは機能しません-c。また、-nそれが何であるかはよくわかりませんが、マニュアルページで回復が中断されることを示しています。したがって、これが実際に動作するかどうか、vimを知っている人の答えを聞きたいです。もちろん、他のviバリアントのソリューションも歓迎されます。

アップデート2:

EXINIT環境変数可能に設定すると、viとnviで動作しますEXINIT=set dir=/tmp/XXX|set recdir=。 nviは起動時に回復できないという警告を表示します。これは促し、viはファイルをファイルシステムに入れますが、少なくとも通常はメモリ内ファイルシステム/ tmpにあります。

ベストアンサー1

vim次のコマンドを使用して、回復されたファイルの場所を移動できます。directoryオプション

set directory=/tmp/XXXXXXXX

次のように単一インスタンスのコマンドラインに追加できます。

mkdir -m700 /tmp/xyz
vim --cmd "set directory=/tmp/xyz" /path/to/secure.file

おすすめ記事