在Linux系统中监控用户命令

发布时间:2026/9/11 9:49:24
在Linux系统中监控用户命令 cmd_observer简介I/T系统的安全性和可靠性一直是一个重要的话题。比如用户拥有的Linux服务器用于生产或者重要的开发项目。而服务器一般都是多用户的系统一些过失的操作或者是恶意的操作有可能给企业或者组织造成严重的损失。监控Linux系统的所有的用户命令是保障系统安全可靠性的一个重要的手段。即使不能立刻阻止错误的命令这个监控对查找问题原因和减少系统恢复的时间有很大的帮助。相关的需求包括监控所有的用户人工或者通过脚本输入的系统命令。无论用户使用什么样的shell (比如bashdash等)所有命令都被记录。收集的命令以安全日志的形式集中提供。可以方便及时地采集集中到系统的安全日志服务器。也方便增加安全设置。也可以选择不通过安全日志而是直接把用户命令发送到集中的安全服务器。这里我提供的解决方案的名称叫做cmd_observer。可以点击查看开源项目和代码的地址。可以看到它的代码非常简单它主要用到了两个开源项目“bpftrace”是一个优秀的基于eBPF的强大脚本工具用于追踪Linux系统。“mmlog” 是我做的一个简单的日志工具。安装并运行cmd_observer首先要安装“bpftrace”。安装步骤请参照相关的文档。对于Ubuntu 19.04 或者更新的版本来说可以使用如下的命令sudo apt-get install -y bpftrace2下一步是安装“mmlog”。这个工具非常简单对于Linux来说可以直接下载发布的二进制文件就是如下的命令wget https://github.com/liurui-software/mmlog/releases/download/v0.7.0/mmlog注意要把mmlog放到PATH中我执行如下的命令chmod x mmlog mv mmlog /usr/bin/再下一步就是下载“cmd_observer.sh”以下是命令wget https://raw.githubusercontent.com/liurui-software/observers/refs/heads/main/cmd_observer/cmd_observer.sh然后设置为可执行chmod x cmd_observer.sh下面测试一下刚才安装的“cmd_observer”执行sudo . /cmd_observer.sh通过如下的命令来观察用户命令tail -F /var/log/cmd_observer.log下面是一个日志的片段2025-02-10T14:39:22Z Attaching 1 probe... 2025-02-10T14:39:26Z liurui:16637(/usr/bin/tail) tail -F /var/log/cmd_observer.log 2025-02-10T14:39:57Z root:16638(/usr/bin/vi) vi /etc/environment 2025-02-10T14:40:27Z liurui:16640(./clickhouse) ./clickhouse client 2025-02-10T14:41:15Z liurui:16645(/usr/bin/vmstat) vmstat 1**注**日志中在用户名后面跟着的数字是进程ID。看到类似以上的日志说明您的“cmd_observer”运行良好。如果您希望在您的Linux系统中长期运行“cmd_observer”的话不妨把它设置为一个Linux Systemd服务。使用如下的命令sudo . /cmd_observer.sh --install可以用如下命令启动“cmd_observer”服务sudo systemctl start cmd_observer可以用如下命令设置Linux系统重启时自动启动“cmd_observer”服务sudo systemctl enable cmd_observer如果您希望把“cmd_observer”从Linux Systemd中删除的话可以中如下的命令sudo . /cmd_observer.sh -uninstall修订“cmd_observer”如果您希望调整“cmd_observer”的运行方式可以先卸载服务sudo . /cmd_observer.sh -uninstall再调整cmd_observer.sh文件。如果有必要重新安装服务sudo . /cmd_observer.sh -install sudo systemctl start cmd_observer sudo systemctl enable cmd_observer最容易修改的是“cmd_observer.sh”文件开始的几个变量的值默认情况是export MM_LOGFILE/var/log/cmd_observer export MM_LOGSIZE10000000 export MM_LOGFILE_NUM10这里分别设置了日志输出的位置/名称日志文件的大小日志文件的循环个数。