Мой сервер - 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
?
В руководстве по аудиту предполагается, что вы знакомы с моделью безопасности POSIX и множеством типов пользовательских идентификаторов. Читать мужские полномочия чтобы лучше с этим ознакомиться. Однако это неполно, ссылка на руководство по безопасности что касается прочего. В частности:
Auid
Записывает идентификатор пользователя аудита. Этот идентификатор назначается пользователю при входе в систему и наследуется каждым процессом, даже если личность пользователя изменяется (например, путем переключения учетных записей пользователей с помощью su - john).
Для эффективности правило и исключения из него можно записать в одну строку. Однако иногда я начинаю с более простых правил. Легче понять и собрать воедино примеры.
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 аудита не существует (не оболочка входа в систему), а имя пользователя - chrony, а контекст SELinux - chronyd_t, никогда не входить».
На самом деле, в этом примере может быть ошибка. Когда chronyd работает под systemd, а пример правил из 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
. Не из оболочки входа в систему и в правильном контексте мне достаточно.
(У этой подсистемы есть свои особенности. Единственное место, где мне удалось перевести auid = 4294967295 в unset, это список рассылки.)