我想查看跨多个用户帐户在 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"
但我真的不认为这比你的想法好多少。