我可以搜索服务器上所有用户的 bash 历史记录吗?

我可以搜索服务器上所有用户的 bash 历史记录吗?

我想查看跨多个用户帐户在 Linux 服务器上运行的所有 bash 命令。我使用的具体发行版是 CentOS 5.7。有没有办法在服务器上全局搜索 .bash_history 文件,或者它会是一个更本土化的进程吗locate | cat | grep? (我刚把它打出来就浑身发抖)。

答案1

用于getent枚举主目录。

getent passwd |
cut -d : -f 6 |
sed 's:$:/.bash_history:' |
xargs -d '\n' grep -s -H -e "$pattern" 

如果您的主目录位于众所周知的位置,则可能很简单

grep -e "$pattern" /home/*/.bash_history

当然,如果用户使用不同的 shell 或不同的 值HISTFILE,这不会告诉您太多信息。这也不会告诉您有关未通过 shell 执行的命令,或有关别名和函数以及现已删除的外部命令(这些命令位于用户的$PATH.如果您想知道用户运行了哪些命令,则需要进程记帐或一些更高级的审计系统;看监视我的计算机上的活动。,如何检查进程完成后运行了多长时间?

答案2

find /home -name .bash_history | xargs grep <string>

或者:

grep string $(find /home -name .bash_history)

请注意,这涵盖了默认位置的主目录。最好解析/etc/passwd或调用getent,并解析其输出。

for i in $(getent passwd | cut -d: -f6 ); do grep string ${i}/.bash_history; done

答案3

你可以做

find /home | grep bash_history | xargs grep "whatever"

但我真的不认为这比你的想法好多少。

相关内容