Answers:
使用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
。如果您想知道用户运行了哪些命令,则需要过程记帐或更高级的审核系统;请参阅监视计算机上的活动。,如何检查一个过程完成了多长时间?。
getent passwd | cut -d : -f 6 | sed "s:$:/.bash_history:" | xargs -d'\n' -I{} sh -c "[ -f {} ] && echo {}" | xargs -d'\n' grep -Hn -e "$pattern"
{}
非常危险。文件名直接在脚本中插入。如果您的文件名(此处为用户名)包含$(rm -rf /)
或;rm -rf /;
,则将执行该命令。始终将文件名作为参数传递给Shell脚本,永远不要使用find或xargs的{}
机制。