![查看单独活动 TTY 的 bash 历史记录](https://linux22.com/image/119019/%E6%9F%A5%E7%9C%8B%E5%8D%95%E7%8B%AC%E6%B4%BB%E5%8A%A8%20TTY%20%E7%9A%84%20bash%20%E5%8E%86%E5%8F%B2%E8%AE%B0%E5%BD%95.png)
我正在编写一个脚本,该脚本将帮助我们团队中的系统管理员监视其他登录用户在其他终端中发生的情况。
我现在遇到的一件事是如何查看已输入的命令。我意识到历史记录在用户退出或键入之前不会保存history -a
,但必须有一种方法来查看内容现在在历史中,即使它存储在内存中的某个地方。
它可能保存在某个地方吗/proc/${pid_of_users_bash}
?我尝试输入一个命令来回显一个唯一的字符串(EG:,echo "foobarbaz"
然后 grep for福巴巴兹 通过关联/proc/PID
目录中的任何平面文件,但没有运气。
如果有人有一个不涉及设置PROMPT_COMMAND
或设置的解决方案histappend
(例如这些),那将不胜感激。
答案1
Bash 不提供您想要的信息。我认为你想要避免设置COMMAND_PROMPT
,histappend
因为用户可能很容易覆盖它们。但是,当用户在每个命令之前设置HISTCONTROL="ignorespace"
并插入空格时,可能会完全禁用将命令存储到历史记录中。因此,不愿意被监控的用户无法通过 bash 历史记录进行可靠的监控。
可以对单个会话进行临时监控strace
。搜索用户 bash 的 PID,然后调用strace -p <bash-pid> 2>&1 |grep "read(0,"
.您可以看到用户输入的所有字符 - 包括拼写错误和编辑命令。
大多数 Linux 发行版都提供了auditd
软件包。它监视和审核系统组件,以便管理员可以获得有关过去系统活动的信息。 PAM 模块pam_tty_audit
与 TTY 活动审核配合auditd
并启用或禁用 TTY 活动审核。我想你不需要重新发明轮子并使用pam_tty_audit
.