まだログインしているユーザーの現在の履歴を読むにはどうすればいいですか?

まだログインしているユーザーの現在の履歴を読むにはどうすればいいですか?

現在、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

関連情報