Свежий centos 6.5 с установленными обновлениями. Мы хотим вести журнал auditd на непостоянном томе, поскольку мы фиксируем все с помощью splunk или logstash.
Целевой каталог / mnt / ephemeral / audit /
# ls -l /var/log
lrwxrwxrwx. 1 root root 21 Dec 9 12:11 audit -> /mnt/ephemeral/audit
После этого auditd не запускается, предположительно, это запрещает selinux. Я предполагаю, что журналы в / var / log / messages содержат требуемые отказы avc для создания новой политики.
Так что я
semanage permissive -a auditd_t
и попробуй еще раз
Dec 9 12:50:56 myhost kernel: type=1400 audit(1418129456.307:93): avc: denied { write } for pid=13174 comm="auditd" name="audit" dev=xvdb ino=147457 scontext=unconfined_u:system_r:auditd_t:s0 tcontext=unconfined_u:object_r:var_t:s0 tclass=dir
Dec 9 12:50:56 myhost kernel: type=1400 audit(1418129456.307:94): avc: denied { add_name } for pid=13174 comm="auditd" name="audit.log" scontext=unconfined_u:system_r:auditd_t:s0 tcontext=unconfined_u:object_r:var_t:s0 tclass=dir
Dec 9 12:50:56 myhost kernel: type=1400 audit(1418129456.307:95): avc: denied { create } for pid=13174 comm="auditd" name="audit.log" scontext=unconfined_u:system_r:auditd_t:s0 tcontext=unconfined_u:object_r:var_t:s0 tclass=file
Dec 9 12:50:56 myhost kernel: type=1400 audit(1418129456.307:96): avc: denied { read open } for pid=13174 comm="auditd" name="audit.log" dev=xvdb ino=147458 scontext=unconfined_u:system_r:auditd_t:s0 tcontext=unconfined_u:object_r:var_t:s0 tclass=file
Dec 9 12:50:56 myhost kernel: type=1400 audit(1418129456.307:97): avc: denied { getattr } for pid=13174 comm="auditd" path="/mnt/ephemeral0/audit/audit.log" dev=xvdb ino=147458 scontext=unconfined_u:system_r:auditd_t:s0 tcontext=unconfined_u:object_r:var_t:s0 tclass=file
Dec 9 12:50:56 myhost kernel: type=1400 audit(1418129456.310:98): avc: denied { append } for pid=13175 comm="auditd" name="audit.log" dev=xvdb ino=147458 scontext=unconfined_u:system_r:auditd_t:s0 tcontext=unconfined_u:object_r:var_t:s0 tclass=file
Dec 9 12:50:56 myhost kernel: type=1400 audit(1418129456.310:99): avc: denied { setattr } for pid=13175 comm="auditd" name="audit.log" dev=xvdb ino=147458 scontext=unconfined_u:system_r:auditd_t:s0 tcontext=unconfined_u:object_r:var_t:s0 tclass=file
Итак, я тогда
grep avc /var/log/messages > /tmp/avc
audit2allow -M mypol < /tmp/avc
semodule -i mypol.pp
restorecon -R -v /
Содержимое te файла:
# cat mypol.te
module mypol 1.0;
require {
type var_t;
type auditd_t;
class dir { write add_name };
class file { getattr setattr read create open append };
}
#============= auditd_t ==============
#!!!! The source type 'auditd_t' can write to a 'dir' of the following types:
# var_run_t, auditd_var_run_t, file_t, auditd_log_t, cluster_var_lib_t, cluster_var_run_t, root_t, cluster_conf_t
allow auditd_t var_t:dir { write add_name };
allow auditd_t var_t:file { getattr setattr read create open append };
Но Audd отказывался запускаться. По общему признанию, я слаб на selinux, пожалуйста, не пламеньте!
Пробовал предложение Майклса, я вижу в / var / log / messages
Dec 10 11:42:52 myhost kernel: type=1400 audit(1418211771.996:29): avc: denied { read } for pid=1494 comm="auditd" name="audit" dev=xvdf ino=49153 scontext=unconfined_u:system_r:auditd_t:s0 tcontext=unconfined_u:object_r:var_log_t:s0 tclass=dir
Dec 10 11:42:52 myhost auditd: Could not open dir /mnt/ephemeral/audit (Permission denied)
Вернуться к audit2allow, попробовал
# grep avc /var/log/messages |tail -n1 | audit2allow -w
Dec 10 12:03:09 euw1-infradev01-sonar-01 kernel: type=1400 audit(1418212989.424:48): avc: denied { read } for pid=1928 comm="auditd" name="audit" dev=xvdf ino=49153 scontext=unconfined_u:system_r:auditd_t:s0 tcontext=unconfined_u:object_r:var_log_t:s0 tclass=dir
Was caused by:
Missing type enforcement (TE) allow rule.
# grep avc /var/log/messages |tail -n1 | audit2allow -M mypol
******************** IMPORTANT ***********************
To make this policy package active, execute:
semodule -i mypol.pp
# cat mypol.te
module mypol 1.0;
require {
type var_log_t;
type auditd_t;
class dir read;
}
#============= auditd_t ==============
allow auditd_t var_log_t:dir read;
и, надеюсь, бинго:
# setenforce 1
# service auditd start
Starting auditd: [ OK ]
Последний бит, сохраняется ли это при перезагрузке? Я узнаю.
SELinux запрещает auditd делать что-либо с /mnt/ephemeral/audit
потому что у него нет одного из разрешенных типов; вместо этого кажется, что он имеет общий тип.
Вам нужно указать SELinux, какой контекст передать этому каталогу и файлам в нем. В идеале мы скопируем существующий контекст, который применяется к /var/log/audit
и повторно использовать это.
Итак, когда мы смотрим /etc/selinux/targeted/contexts/files/file_contexts
мы находим применимый контекст:
/var/log/audit(/.*)? system_u:object_r:auditd_log_t:s0
Это легко адаптировать. Выполните команду:
semanage fcontext --add --type auditd_log_t "/mnt/ephemeral/audit(/.*)?"
Затем исправьте существующие файловые контексты:
restorecon -r -v /mnt/ephemeral/audit
Наконец, перезапустите auditd.
Я не даю никаких гарантий относительно того, что произойдет при следующей загрузке. Вам нужно будет проверить это и посмотреть, что сломается. :)
Я думаю, что он не запускается, потому что журнал указывает на символическую ссылку. Вы можете определить местоположение файла журнала в /etc/audit/auditd.conf. Из auditd.conf страница руководства:
log_file Это ключевое слово указывает полный путь к файлу журнала, в котором будут храниться записи аудита. Это должен быть обычный файл.