
我目前在 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
命令總結了先前執行的命令的資訊。last
和lastb
命令顯示上次登入使用者的清單。
安裝:
apt-get install acct
然後您必須啟用該服務
service pcacct start