我目前在 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