我的服务器是 centos7.6,带有 auditd 2.8.5
在审计规则中,我设置:
-a always,exit -F arch=b32 -S adjtimex,settimeofday -F key=time-change
但是这个规则也记录了正常的ntpd
活动,于是尝试把这个规则修改为:
-a always,exit -F arch=b32 -S adjtimex,settimeofday,stime -F subj_type!=ntpd_t -F auid!=chrony -F auid!=ntp -F auid!=chrony -F auid!=ntp -F key=time-change
应该使用auid!=ntp
还是uid!=ntp
?我检查了手动的:
每个字段间等式相互进行“与”运算,以 -F 开头的等式也相互进行“与”运算以触发审计记录。支持 2 个运算符 - 相等和不相等。有效字段为:auid、uid、euid、suid、fsuid、obj_uid、gid、egid、sgid、fsgid、obj_gid
我很困惑,auid,uid,euid,suid,fsuid,obj_uid,gid,egid,sgid,fsgid,obj_gid 之间有什么区别auditctl
?
答案1
审计手册假设您熟悉 POSIX 安全模型和多种类型的 uid。阅读男子凭证以进一步了解这一点。但是,这并不完整,请参考安全指南(例如RHEL 审计系统参考)其余部分。值得注意的是:
澳伊德
记录审计用户 ID。此 ID 在用户登录时分配给用户,并且即使用户身份发生变化(例如,通过使用 su - john 切换用户帐户),每个进程也会继承此 ID。
为了提高效率,可以将规则及其例外情况写在一行上。但是,我有时会从更简单的规则开始。更容易理解,并将示例拼凑在一起。
auditd 附带了用于审计时间变化和忽略 chronyd 的示例规则。请查看 /usr/share/doc/audit*/rules/22-ignore-chrony.rules
:
## This rule suppresses the time-change event when chrony does time updates
-a never,exit -F arch=b64 -S adjtimex -F auid=unset -Fuid=chrony -F subj_type=chronyd_t
-a never,exit -F arch=b32 -S adjtimex -F auid=unset -Fuid=chrony -F subj_type=chronyd_t
“在 64 位平台上,对于 adjtimex 调用,当审计 UID 不存在(不是登录 shell),且用户名是 chrony,并且 SELinux 上下文是 chronyd_t 时,从不记录。”
实际上,该示例可能有错误。使用 systemd 下运行的 chronyd 和来自的示例规则30-pci-dss-v31.rules
,我发现审计事件为 uid 0。
type=SYSCALL msg=audit(1552670692.891:1067): arch=c000003e syscall=159 success=yes exit=5 a0=7ffe0d94ae10 a1=0 a2=55e857a3af60 a3=0 items=0 ppid=1 pid=6487 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="chronyd" exe="/usr/sbin/chronyd" subj=system_u:system_r:chronyd_t:s0 key="10.4.2b-time-change"
ps 报告它以用户 chrony 身份运行,并在 chronyd_t 上下文中运行。因此它受到限制,但 auditd 反映了 systemd 如何以 root 身份启动它。
尝试条件-F auid=unset -F subj_type=chronyd_t
。不是来自登录 shell 并且在正确的上下文中对我来说已经足够好了。
(这个子系统有其怪癖。我唯一能够将 auid=4294967295 转换为 unset 的地方是邮件列表。