我正在为 Linux Audit 编写一个解析器,我偶然发现了一些似乎不符合标准的奇怪情况。
我的参考是红帽的文档。
正确的审计记录应该如下所示:
type=USER_CMD msg=audit(1464013671.517:403): pid=3569 uid=0 auid=1000 ses=7 msg='cwd="/root" cmd=123 terminal=pts/1 res=success'
记录中的名称=值字段无效
我们来看下面的记录:
type=DAEMON_START msg=audit(1464013652.147:626): auditd start, ver=2.4 format=raw kernel=3.16.0-4-586 auid=4294967295 pid=3557 res=success
该文档没有说明auditd start
哪些内容不符合名称=值格式。
这是什么?我可以在哪里阅读相关内容?
逗号和空格作为分隔符
此外,文档说
每条记录由多个用空格或逗号分隔的“名称=值”对组成。
这显然是不正确的,因为我们可以看到它们auditd start, ver=2.4
是用命令分隔的和空间。
为什么会这样呢?标准在哪里真的描述?
记录中的额外空格
我们来看下面的记录:
type=CWD msg=audit(1464013682.961:409): cwd="/root"
type=CWD msg=audit(1464013682.961:409):
和之间有两个空格cwd="/root"
。这没有任何意义。事实上,我只在带有type=CWD
和 的记录中观察到这种行为cwd="/root"
。
为什么会这样呢?
注意:我在最近的 Debian 上生成了这些日志。
答案1
所以我解决了问题的一小部分——我发现这auditd start, ver=2.2
是有效的。但我没有找到任何文档。我拥有的唯一文档是 Red Hat 手册中的示例:
例 7.5。其他audit.log事件
以下审核事件记录了auditd 守护进程的成功启动。 ver 字段显示已启动的审核守护程序的版本。
type=DAEMON_START msg=audit(1363713609.192:5426): auditd start, ver=2.2 format=raw kernel=2.6.32-358.2.1.el6.x86_64 auid=500 pid=4979 subj=unconfined_u:system_r:auditd_t:s0 res=success
以下审核事件记录 UID 为 500 的用户以 root 用户身份登录的失败尝试。
type=USER_AUTH msg=audit(1364475353.159:24270): user pid=3280 uid=500 auid=500 ses=1 subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 msg='op=PAM:authentication acct="root" exe="/bin/su" hostname=? addr=? terminal=pts/0 res=failed'
可悲的是,这些只是例子。我很想阅读该标准的实际文档,因为我在任何地方都找不到它。
更新
我向官方邮件列表提出了这些问题(查看对我的问题的完整答复)。
这是我学到的:
记录中的名称=值字段无效
我不清楚为什么auditd start
存在,但这是史蒂夫·格鲁布对我的问题的回答。
诸如auditd start、user 等所有元素都在哪里列出?我找不到任何文档来指定冒号(将类型和 msg=audit(…) 与字段分开)和记录字段之间可能发生的情况。
确实没有,Libauparse 会处理所有这一切,因此您不必这样做。如果您想要进行翻译,您可以将日志输入auparse,然后按照您想要的方式格式化事件。
基本上,答案隐藏在 auparse 库的某个地方。
逗号和空格作为分隔符
为什么有些记录用逗号和空格分隔?例子:
type=DAEMON_START msg=audit(1363713609.192:5426): auditd start, ver=2.2 format=raw kernel=2.6.32-358.2.1.el6.x86_64 auid=500 pid=4979 subj=unconfined_u:system_r:auditd_t:s0 res=success
很久以前,这些记录应该是人类可读的(别笑)和机器可消费的。随着时间的推移,这些已转换为名称=值对。甚至你上面提到的那个也已经修复了。
记录中的额外空格
Steve Grubb 已经修复了这个问题。
补丁:https://www.redhat.com/archives/linux-audit/2016-July/msg00086.html