如何讀取仍然登入的用戶的當前歷史記錄?

如何讀取仍然登入的用戶的當前歷史記錄?

我目前在 Debian Wheezy 伺服器上有一個 root 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命令總結了先前執行的命令的資訊。
  • lastlastb命令顯示上次登入使用者的清單。

安裝:

apt-get install acct

然後您必須啟用該服務

service pcacct start

相關內容