このメモでは、Linuxで開いているファイルを復元する方法を共有したいと思います。
背景
男がjabberでdebian専用のチャンネルに行き、jabber-botをハッキングしてコマンドを実行したと言いました。
$ rm -rf /*
これはルートの下では行われなかったため、特別な問題は発生しませんが、ボットの構成ファイルは削除されました。 ボットは実行されたままで、タスクは開いたファイルを復元し、同じ設定でできるだけ早くすべてを上げることでした。
ファイルを復元する
まず、 lsofアプリケーションがインストールされ 、 procfsが / procにマウントされていることを確認する必要があります。
このメモでは、開いているファイルが復元されるシステムでは、必要なすべてのアプリケーションがインストールされ、ルートアクセスがあり、必要に応じてすべてがマウントされると考えます。
まず、lsofプログラムを使用して開いているファイルを見つける必要があります。
$ sudo lsof | grep filename
例:
$ sudo lsof | grep /home/anton/.xsession-errors kwin 2031 4002 anton 2w REG 253,3 4486557 1835028 /home/anton/.xsession-errors
これらの値に興味があります:
- プロセス番号(pid)
- ファイル記述子
ここで必要なものを太字で強調します。
kwin 2031 4002 anton 2 w REG 253.3 4486557 1835028 /home/anton/.xsession-errors
次に、それを復元します(他の場所に保存することもできます):
$ sudo cp /proc/2031/fd/2 /home/anton/.xsession-error
以上で、開いているファイルを復元できますが、何らかの理由で削除されています。
UPD1 :特定のアプリケーションで開いているすべてのファイルを見つけて復元する方法を尋ねられました。
復元する必要がある1つのファイルを知っていると仮定すると、
$ sudo lsof | grep /home/anton/.xsession-errors kwin 2031 anton 2w REG 253,3 4486557 1835028 /home/anton/.xsession-errors
2031はファイルを保持するプロセスのPIDであることがわかります。 このプロセスを開いたままにするすべてのファイルを見つける必要があります。
$ sudo lsof -p 2031
このプロセスで開いているすべてのアプリケーションが表示されます。リモートアプリケーションを選択するだけです。
$ sudo lsof -p 2031 | grep deleted
次に、上記のようにすべてのファイルを復元します。
UPD2 :高速に動作するパラメーターの代わりにgrepを使用してファイルを検索するのはなぜですか?
ファイルがそこに表示されているかどうかに関係なく、grepを使用します。
UPD3 : lsコマンドを使用して、開いているすべてのプロセスファイルを表示することもできます。例:
$ ls -lia /proc/2031/fd/