如何读取仍登录用户的当前历史记录?

如何读取仍登录用户的当前历史记录?

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

相关内容