如何获取另一个用户的命令行历史记录?

如何获取另一个用户的命令行历史记录?

我目前设置了一台服务器,可以立即在各自的主文件夹中保存每个用户的 Bash 历史记录,并且我想创建一个按设定的时间间隔运行的脚本,用于切换当前用户并执行“history”命令。

我已经在命令行中尝试了 su 和 sudo 的所有变体,但是每当我在脚本中为另一个用户运行命令“history”或使用 su/do 时,我都没有得到任何输出。

在脚本中,我尝试了 su 和 sudo 的所有变体,以及:

su <user>
history

但它所做的只是用该用户打开一个 shell,并且不返回“history”的输出。

我目前正在使用 RHEL6.9 和 Bash 4.1.2。

编辑:

我有一个日志收集器,当前监视所有 .bash_history 文件,但我将 /etc/bashrc 配置为附加时间戳和用户,以便我可以分配字段并记录每个命令的确切执行时间。因为 Bash 在 .bash_history 中存储命令行历史记录的内部格式只是添加纪元时间,所以我需要能够对每个单独的用户执行“历史记录”。

我已经从命令行以及脚本中(分别)尝试了以下操作:

su -c "history" <user>
sudo -i -u <user> history
sudo -S -u <user> -i /bin/bash -l -c 'history'

我尝试在脚本中执行此操作:

su -i <user>
history

但他们从不返回任何结果。

答案1

创建一个脚本并将其保存在可供所有用户使用的 PATH 中的某个位置。例如/bin/usr/bin

剧本

#!/usr/bin/env bash

HISTFILE=$HOME/.bash_history
history -r
unset HISTFILE
history

将其保存为类似名称print_history

现在尝试

su - user_name -c 'print_history'

您说您有时间格式,/etc/bashrc所以我没有HISTTIMEFORMAT在该脚本中取消设置。该脚本的想法不是我的,我个人使用该PROMPT_COMMAND变量来捕获在交互式会话期间键入/运行命令的每个命令(以及我系统中的每个用户),因此我不使用该脚本,所以这就是我能说的那个脚本。当然,所有用户都必须使用 bash 作为登录 shell。

相关内容