
現在、Debian Wheezy サーバーでルート SSH セッションを実行していますが、別のユーザーが現在ログインしています (権限のないアカウントを使用)。ユーザーがまだログインしているため、履歴がhistory
フラッシュされず、ファイルが最新ではない (まだメモリ内にある) ため、コマンドは正しいものを表示しません~/.bash_history
。
ユーザーがまだログインしているときに、セッション中に何を行ったかを確認するためにメモリをダンプするにはどうすればよいですか?
答え1
以下は、履歴をダンプする小さなスクリプトです。他のプロセスのメモリ領域をこっそり取得するには、root になる必要があることに注意してください。
#!/bin/bash
if [ $# -eq 0 ]; then
echo "usage: $0 <bash_pid>"
exit 1
fi
gdb -batch \
--eval "set sysroot /" \
--eval "attach $1" \
--eval "call write_history(\"/tmp/bash_history-$1.txt\")" \
--eval 'detach' \
--eval 'q'
exit 0
ps 「警告: ... の共有ライブラリ シンボルをロードできませんでした」のようなエラーが、他のいくつかのエラー行とともに表示されることがあります。スクリプトが動作しなかったと確信する前に、/tmp/ から履歴ファイルを探してみてください。
答え2
bash_history は必ずしも保存されず、上書きされる可能性があるため、実際には信頼できません。また、マルチセッション使用中にすべてが保存されるわけではありません (もちろん、これは構成によって異なります)。
acct
そのようなデータを追跡することが本当に必要な場合は、次のような便利なツールを備えた設定に進みます。
ac
コマンドは、ユーザーのログイン/ログアウト (接続時間) の統計を時間単位で出力します。lastcomm
コマンドは、ユーザーが以前に実行したコマンドの情報を出力します。accton
コマンドは、アカウンティングのプロセスをオン/オフにするために使用されます。sa
コマンドは、以前に実行されたコマンドの情報を要約します。last
コマンドlastb
は最後にログインしたユーザーのリストを表示します。
インストールするには:
apt-get install acct
次にサービスを有効にする必要があります
service pcacct start