Jus*_*tin 5 shell command-history tty proc
我正在编写一个脚本,该脚本将帮助我们团队的系统管理员监控其他登录用户在其他终端上发生的事情。
我现在遇到的一件事是如何查看已键入的命令。我意识到在用户退出或输入之前不会保存历史记录history -a,但是必须有一种方法来查看当前历史记录中的内容,即使它存储在内存中的某处。
它可能保存在某个地方/proc/${pid_of_users_bash}吗?我试着键入命令呼应的唯一字符串(EG: echo "foobarbaz",然后greping为foobarbaz 通过相关联的任何平面文件/proc/PID的目录,但没有运气。
如果有人有不涉及设置PROMPT_COMMAND或设置histappend(像这些)的解决方案,那将不胜感激。
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.