Назад | Перейти на главную страницу

SELinux блокирует sudo от zabbix_agentd

У меня есть специальный пользовательский параметр для Zabbix, который вызывает аппаратный инструмент RAID CLI (arcconf / megacli) и проверяет, не ухудшились ли какие-либо массивы. Поскольку эти инструменты предназначены только для root, я настроил sudoers, чтобы разрешить пользователю zabbix доступ без пароля:

Defaults:zabbix !requiretty
Cmnd_Alias ZABBIX_MEGACLI_CMDS = /opt/MegaRAID/MegaCli/MegaCli64 -LDInfo -Lall -aALL
zabbix  ALL     = (ALL) NOPASSWD: ZABBIX_MEGACLI_CMDS

В CentOS 5 zabbix_agentd работал без ограничений, и все было хорошо. В CentOS 6 агент теперь работает в отдельном домене zabbix_agent_t. Это вызвало проблемы. Первоначально сам бинарный файл sudo не мог быть выполнен, но я добавил эту политику:

sudo_exec(zabbix_agent_t)

Теперь умирает по-другому:

type=AVC msg=audit(1407137597.193:157): avc:  denied  { create } for  pid=3145 comm="sudo" scontext=unconfined_u:system_r:zabbix_agent_t:s0 tcontext=unconfined_u:system_r:zabbix_agent_t:s0 tclass=unix_dgram_socket
type=SYSCALL msg=audit(1407137597.193:157): arch=c000003e syscall=41 success=no exit=-13 a0=1 a1=80002 a2=0 a3=1 items=0 ppid=3121 pid=3145 auid=0 uid=496 gid=495 euid=0 suid=0 fsuid=0 egid=495 sgid=495 fsgid=495 tty=(none) ses=3 comm="sudo" exe="/usr/bin/sudo" subj=unconfined_u:system_r:zabbix_agent_t:s0 key=(null)
type=AVC msg=audit(1407137597.193:158): avc:  denied  { create } for  pid=3145 comm="sudo" scontext=unconfined_u:system_r:zabbix_agent_t:s0 tcontext=unconfined_u:system_r:zabbix_agent_t:s0 tclass=netlink_audit_socket
type=SYSCALL msg=audit(1407137597.193:158): arch=c000003e syscall=41 success=no exit=-13 a0=10 a1=3 a2=9 a3=7fffce049a20 items=0 ppid=3121 pid=3145 auid=0 uid=496 gid=495 euid=0 suid=0 fsuid=0 egid=495 sgid=495 fsgid=495 tty=(none) ses=3 comm="sudo" exe="/usr/bin/sudo" subj=unconfined_u:system_r:zabbix_agent_t:s0 key=(null)

Это правильный подход? Какие еще политики я могу добавить, чтобы zabbix_agent_t мог запускать sudo? Если sudo работает, будет ли он по-прежнему ограничен доменом zabbix_agent_t или я должен добавить, например, TYPE=unconfined_t к строке sudoers? Я должен принять https://bugzilla.redhat.com/show_bug.cgi?id=917157 и s / nrpe_t / zabbix_agent_t /?

РЕДАКТИРОВАТЬ:

Не уверен, что это лучшая идея, но ...

sudo_exec(zabbix_agent_t)
domtrans_pattern(zabbix_agent_t, sudo_exec_t, unconfined_t)

вроде работает. Я полагаю, что в худшем случае это зависит от безопасности файлов sudo и sudoers.

Способ справиться с этим - собрать всю информацию о том, какой доступ требуется программе, а затем явно разрешить только этот доступ в настраиваемом модуле политики.

Сделать это довольно просто.

Ты первый установить разрешающий домен, поэтому SELinux временно не применяет свои правила. Все равно будет журнал отказов, и позже вы будете использовать эти журналы.

semanage permissive -a zabbix_agent_t

Затем позвольте программе запуститься и позвольте ей делать все, что ей нужно. В журнал аудита будут заполнены тем, что было бы отклонено, и эти журналы также показывают, какие разрешения необходимо предоставить. затем просматривать эти журналы с ausearch.

ausearch -r -m avc -ts today

Хорошо создать модуль локальной политики содержащий необходимые разрешения. (Вам нужно использовать -r вариант с ausearch здесь, чтобы вывод мог быть обработан другими скриптами.)

Если вы увидели явно нерелевантные записи, перенаправьте вывод в файл, а затем отредактируйте его, чтобы удалить их. Тогда используйте вместо этого файл.

ausearch -r -m avc -ts today | audit2allow -M zabbix_megacli

Наконец, мы устанавливаем наш новый модуль локальной политики и снова включаем принудительное применение SELinux.

semodule -i zabbix_megacli.pp
semanage permissive -d zabbix_agent_t