如何实时监控 Linux 用户执行了哪些命令(sysdig/tlog/auditd)?

在 Linux 系统中.bash_history只记录了用户曾经输入过的命令,另外,它也有可能被用户清理(history -c)。
如果我们需要实时了解系统上用户正在做什么,或者需要一份即使用户试图隐藏操作也无法删除的记录,那么 Bash 历史记录并不是合适的工具。
若需满足实时监控与防篡改审计需求,须采用其他工具。下面将逐一介绍。
一、查看用户的 Bash 历史文件
用户在交互式 Bash Shell 中执行的每一条命令,通常都会保存在其主目录下一个名为 .bash_history 的隐藏文件中。
cat /home/ymadmin/.bash_history
[root@yyzcdb81 ~]# cat /home/ymadmin/.bash_history #1770083790 exit #1785902380 top #1785902397 w #1785902411 exit [root@yyzcdb81 ~]#
这样就可以看到用户在之前 Shell 会话中输入过的命令。
不过,默认情况下历史文件并不包含时间戳。我们能知道用户执行了哪些命令,但不知道是什么时候执行的。
二、为 Bash 历史记录添加时间戳
要显示每条历史记录对应的日期和时间,设置 HISTTIMEFORMAT 环境变量即可:
export HISTTIMEFORMAT='%F %T ' history
格式说明:
- %F 以 YYYY-MM-DD 格式显示日期
- %T 以 HH:MM:SS 格式显示时间
设置完成后,history 命令会在每条命令旁边显示时间戳,审查用户活动就方便多了。
……
1823 2026-08-03 09:21:43 last
1824 2026-08-03 09:25:05 last reboot
1825 2026-08-03 09:29:12 last
1826 2026-08-03 09:33:57 last | awk '{print $3}' | sort | uniq -c | sort -rn | head -20
1827 2026-08-03 09:36:07 lastb
1828 2026-08-03 09:56:14 w
1829 2026-08-03 09:56:17 who
1830 2026-08-03 09:56:19 whoa -a
1831 2026-08-03 09:56:23 who -a
1832 2026-08-03 09:56:36 LANG=en_US
1833 2026-08-03 09:56:41 who -a
1834 2026-08-03 09:56:53 who am i
1835 2026-08-03 09:58:47 who | awk '{print $5}' | tr -d '()' | sort | uniq -c
1836 2026-08-03 09:59:11 who | grep "^root"
1837 2026-08-03 10:01:08 w
1838 2026-08-05 13:22:11 cat /home/ymadmin/.bash_history
……
如果想让所有用户自动启用此功能,在 /etc/profile 或 /etc/bash.bashrc 中添加:
export HISTTIMEFORMAT='%F %T '
注意:这只对用户重新登录后的新 Shell 会话生效。.bash_history 并不是可靠的审计日志——文件属于用户本人,他们可以用
history -c清空、通过 unset HISTFILE 禁用历史记录,甚至在注销前直接编辑文件。时间戳让历史记录在回顾我们自己执行的命令时更实用,但无法阻止他人删除或篡改历史。如果我们需要一份值得信赖的用户活动记录,就要用到本文后面介绍的专用审计工具。
三、查看谁在登录、在做什么
w 命令可以快速查看系统当前已登录用户的情况。它告诉我们:谁在线、从哪个终端连进来、空闲了多久,以及当前正在运行什么命令。
[root@yyzcdb81 ~]# w 11:58:48 up 15 days, 22:04, 2 users, load average: 0.00, 0.01, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 10.129.2.30 11:55 0.00s 0.31s 0.00s w root pts/1 10.129.2.30 11:58 8.00s 0.30s 0.02s -bash [root@yyzcdb81 ~]#
输出包含:
- 已登录的用户名
- 连接的远程主机或终端
- 登录时间和空闲时间
- 当前正在执行的命令或进程
这对于快速了解系统状态很有用,但要记住:w 只显示系统当前状态的快照,既不会持续监控用户活动,也不会保留命令历史。
四、用 Sysdig 实时监控命令
如果我们需要在用户执行命令的同时看到它们,sysdig 是一个远比 Bash 历史更好的选择。它通过实时监测系统调用来工作,让我们能同步观察用户活动。
安装 sysdig 后运行:
sysdig -c spy_users
参数含义:
- sysdig 启动系统调用追踪工具
-c spy_users使用内置的 spy_users 探测器,显示登录用户执行的交互式命令及目录变更。
用户一按回车,我们就能在屏幕上看到这条命令。这让 sysdig 非常适合在线系统的故障排查或活动监控。
[root@yyzcdb81 tmp]# sysdig -c spy_users 16833 13:27:30 root) ls --color=auto -l --color=auto 16833 13:27:34 root) cd / 16833 13:27:35 root) ls --color=auto -l --color=auto 16833 13:27:43 root) cd /backup 16833 13:27:44 root) ls --color=auto -l --color=auto 16833 13:27:58 root) du -sh ……
关于 sysdig 的安装,下一篇文章专门介绍。
五、用 tlog 录制用户终端会话
有时候,仅靠实时监控是不够的。我们可能还需要一份完整的用户终端会话记录,以便事后回放审查。这就是 tlog 的用武之地。
tlog 可以录制整个终端会话,包括用户输入和终端输出,方便我们事后回放,用于审计或故障排查。
手动启动录制会话:
tlog-rec-session
回放已录制的会话:
tlog-play -i session.log
命令说明:
tlog-rec-session启动一个终端会话,将用户输入和屏幕显示的所有内容都记录下来tlog-play -i session.log按原始时序回放录制好的会话,方便我们完整复盘操作过程
在生产环境中,管理员通常通过 PAM(可插拔认证模块)来配置 tlog,让录制在用户登录时自动启动,不需要用户自己执行 tlog-rec-session。
RHEL、Rocky Linux 及其他 Red Hat 系发行版的官方仓库中都包含 tlog。Debian 和 Ubuntu 也有,但可能需要手动安装。
六、用 auditd 实现持久审计
如果我们需要一份用户无法篡改的可靠审计轨迹,auditd 是正确的选择。它从内核层面记录系统事件,并将日志保存在/var/log/audit/audit.log——普通用户既不能编辑也无法删除。
在 64 位系统上记录所有用户执行程序的审计规则:
auditctl -a always,exit -F arch=b64 -S execve
查看最近录制的执行事件:
ausearch -m execve -ts recent
命令说明:
- auditctl -a always,exit -F arch=b64 -S execve — 添加一条审计规则,记录每一次 execve 系统调用(任何程序被执行时都会触发这个调用)
- ausearch -m execve -ts recent — 在审计日志中搜索最近记录的 execve 事件

由于 auditd 在内核级别记录事件,而不是依赖用户的 Shell 历史,它提供了一条远比 Shell 历史值得信赖的审计轨迹。正因如此,在需要满足安全合规要求的环境中,auditd 被广泛采用。
七、用 script 命令录制终端会话
如果我们想录制终端会话用于故障排查、演示或文档记录,script 命令是一个快捷轻便的选择。
开始录制:
script -a session.log
参数含义:
- -a 追加写入现有日志文件,而不是覆盖它
- session.log 终端会话的保存文件
会话期间终端上显示的所有内容都会写入日志文件。录制完成后,输入以下命令停止:
exit
script 命令很轻量,大多数 Linux 发行版都自带,无需额外安装。但要注意,它只能录制手动启动的会话。
对于全系统持续审计或自动录制用户会话的需求,tlog 或 auditd 这类工具更为合适。
总结
想要快速查看用户执行过哪些命令,Bash 历史确实很方便,但它只能作为参考,不能当作正式的审计日志——因为用户完全可以自己修改甚至删除这些记录。
如果只是想知道当前有哪些用户在活动、在做什么,用 w 命令就足够了。
要是想实时监控命令的执行,sysdig 可以帮你在命令运行的同时就捕获到它的踪迹。
不过,如果要做长期的审计或者录制完整的操作会话,还是得靠 tlog 和 auditd 这类更专业的工具。它们不依赖 Shell 的历史文件,记录也无法被用户随意更改,可靠性要高得多。
以上关于如何实时监控 Linux 用户执行了哪些命令(sysdig/tlog/auditd)?的文章就介绍到这了,更多相关内容请搜索码云笔记以前的文章或继续浏览下面的相关文章,希望大家以后多多支持码云笔记。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » 如何实时监控 Linux 用户执行了哪些命令(sysdig/tlog/auditd)?
微信
支付宝