必须启用内核级审计子系统(audit)并配置对应规则,具体包括:一、修改grub参数启用audit=1并重启;二、启动auditd服务;三、配置execve系统调用审计规则;四、可用auditctl动态添加临时规则;五、用ausearch等工具验证日志记录。

如果您在麒麟操作系统中需要对终端命令执行过程进行自动记录与审计,则必须启用内核级审计子系统(audit)并配置对应规则。以下是实现终端命令自动日志记录的多种可行方法:
一、启用内核审计参数并重启生效
该方法通过修改GRUB启动参数,使audit功能在内核加载阶段即被激活,为后续命令审计提供底层支持。
1、备份原始GRUB默认配置文件:cp -r /etc/default/grub /etc/default/grub.bak
2、编辑GRUB默认配置:vim /etc/default/grub
3、在GRUB_CMDLINE_LINUX行末尾添加或修改参数:audit=1,确保不存在audit=0覆盖项
4、重新生成GRUB配置文件:grub2-mkconfig -o /boot/grub2/grub.cfg
5、执行系统重启:reboot
6、重启后验证内核参数是否生效:cat /proc/cmdline | grep audit=1
二、启动并验证auditd服务状态
auditd是用户空间守护进程,负责接收内核审计事件、写入日志文件并管理规则加载,必须处于运行状态才能记录终端命令。
1、检查auditd服务当前状态:systemctl status auditd.service
2、若服务未运行,启用并启动:systemctl enable --now auditd.service
3、确认服务已激活且无报错:systemctl is-active auditd 应返回 active
4、查看审计日志目录是否存在且可写:ls -ld /var/log/audit/
三、配置终端命令执行审计规则
仅启用audit内核和auditd服务不足以自动记录所有终端命令;必须显式定义规则,捕获execve系统调用,这是shell执行命令的核心入口。
1、编辑规则文件:vim /etc/audit/rules.d/terminal-commands.rules
一款AI工具,主要用于在主代理响应前,并行运行Kimi K2.5和GPT 5.3 Codex,注入双方观点以增强认知多样性,适合需要提升相关任务效率的用户。
2、写入64位架构命令执行审计规则:-a always,exit -F arch=b64 -S execve -k cmd_exec
3、写入32位兼容架构规则(如需支持i686程序):-a always,exit -F arch=b32 -S execve -k cmd_exec
4、保存退出后加载全部规则:augenrules --load
5、立即验证规则是否载入:auditctl -l | grep cmd_exec
四、通过auditctl动态添加临时命令审计规则
该方法无需重启或修改持久化规则文件,适用于快速验证或临时开启审计,规则在auditd服务重启后失效。
1、以root身份执行以下命令添加execve监控:auditctl -a always,exit -F arch=b64 -S execve -k interactive_cmd
2、补充32位支持(如需):auditctl -a always,exit -F arch=b32 -S execve -k interactive_cmd
3、确认规则已注册:auditctl -l | grep interactive_cmd
4、手动触发一条命令用于测试,例如:ls -l /tmp
5、立即检索刚产生的审计记录:ausearch -k interactive_cmd -i | head -20
五、验证终端命令日志是否成功记录
审计日志以二进制格式存储于/var/log/audit/目录下,需使用ausearch等专用工具解析,直接读取audit.log不可见明文命令。
1、查找最近5分钟内所有带key为cmd_exec的记录:ausearch -k cmd_exec -ts recent -i
2、提取某次bash会话中的全部命令执行链:ausearch -m execve -ui $(id -u) -i | grep -A 5 -B 2 "comm=bash"
3、检查审计日志文件是否持续增长:ls -lt /var/log/audit/audit.log*
4、确认auditd未因磁盘满或权限问题丢弃事件:journalctl -u auditd --since "1 hour ago" | grep -i "lost\|full\|denied"










