Настройте selinux для разрешения openldap на CentOS 6.4

Я пытаюсь запустить сервер OpenLDAP на CentOS 6.4 с включенным selinux, но slapd умирает, как только он начал через /etc/init.d/slapd start, (сценарий инициализации сообщает ОК; после setenforce 0,

нашел эти сообщения в /var/log/audit/audit.log:

type = AVC msg = аудит (1372888328.397:3262): avc: запрещен { write } для pid=1492 comm="slapd" name="slapd.log" dev=dm-0 ino=4348 scontext= не определен_u:system_r:slapd_t:s0 tcontext=undefined_u:object_r:var_log_t:s0 tclass= файл
type=SYSCALL msg= аудит (1372888328.397:3262): arch=40000003 syscall=5 success= нет выхода =-13 a0=1bd1018 a1=241 a2=1b6 a3=7ea191 элементов =0 ppid=1491 pid=1492 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts1 ses=337 comm="slapd" exe="/usr/sbin/slapd" subj=undefined_u:system_r:slapd_t:s0 key=(null)
type=AVC msg= аудит (1372888328.408:3263): avc: отказано { sys_nice } для pid = 1492 comm = возможность "slapd" =23  scontext=undefined_u:system_r:slapd_t:s0 tcontext=undefined_u: system_r: slapd_t: s0 tclass = возможность
type=SYSCALL msg= аудит (1372888328.408:3263): arch=40000003 syscall=156 success=yes exit=0 a0=5d4 a1=0 a2=bfe64968 a3=b787a6c0 items=0 ppid=1491 pid=1492 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts1 ses=337 comm="slapd" exe="/usr/sbin/slapd" subj= не определено_u: system_r: slapd_t: s0 key = (null)
type = AVC msg = аудит (1372888328.424:3264): avc: отказано {чтение} для pid=1493 comm="slapd" name="log.0000000001" dev=dm-0 ino=263969 scontext= не определено_u:system_r:slapd_t:s0 tcontext=undefined_u:object_r:var_log_t:s0 tclass= файл
type=SYSCALL msg= аудит (1372888328.424:3264): arch=40000003 syscall=5 success= нет выхода =-13 a0=1c78270 a1=8000 a2=0 a3=0 элементов =0 ppid=1 pid=1493 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(нет) ses=337 comm="slapd" exe="/usr/sbin/slapd" subj=undefined_u: system_r: slapd_t: s0 key = (null)

Однако это оставляет меня без понятия, как это исправить. Как мне сказать selinux разрешить запуск демона LDAP?


Я старался

restorecon -v -F -R /etc/openldap
restorecon -v -F -R /var/lib/ldap

но это не сработало (и на самом деле это, похоже, нарушило мою способность запускать slapd даже при отключенном selinux). Получил много сообщений, таких как

restorecon reset /etc/openldap/cacerts context undefined_u:object_r:etc_t:s0->system_u:object_r:etc_t:s0

1 ответ

Если вы фильтруете журналы аудита через audit2allow(1) а также audit2why вы получите приблизительное представление о том, что происходит:

#============= slapd_t ==============
allow slapd_t self:capability sys_nice;
allow slapd_t var_log_t:file { write read };
------------------------------------

    Was caused by:
            Missing type enforcement (TE) allow rule.

            You can use audit2allow to generate a loadable module to allow this access.

type=AVC msg=audit(1372888328.408:3263): avc:  denied  { sys_nice } for  pid=1492 comm=slapd capability=23  scontext=unconfined_u:system_r:slapd_t:s0 tcontext=unconfined_u:system_r:slapd_t:s0 tclass=capability

    Was caused by:
            Missing type enforcement (TE) allow rule.

            You can use audit2allow to generate a loadable module to allow this access.

type=AVC msg=audit(1372888328.424:3264): avc:  denied  { read } for  pid=1493 comm=slapd name=log.0000000001 dev=dm-0 ino=263969 scontext=unconfined_u:system_r:slapd_t:s0 tcontext=unconfined_u:object_r:var_log_t:s0 tclass=file

    Was caused by:
            Missing type enforcement (TE) allow rule.

            You can use audit2allow to generate a loadable module to allow this access.

Проверка маркировки

Маловероятно, что восстановление метки препятствует запуску службы, если SELinux находится в разрешающем режиме. Кроме того, почему -F выключатель?

Чтобы узнать, нужно ли восстанавливать метки каталога или файла, сначала выясните, какой контекст должен иметь файл или каталог:

# matchpathcon /etc/openldap/
/etc/openldap   system_u:object_r:etc_t:s0

Затем перечислите его контекст безопасности:

# ls -ldZ /etc/openldap/
drwxr-xr-x. root root system_u:object_r:etc_t:s0       /etc/openldap//

В этом примере никаких дальнейших действий не требуется.

Что касается вашей проблемы, проблема не в маркировке как таковой, а в отсутствии type enforcement правило, т.е. правило, которое позволяет помеченному процессу переходить из одного ограниченного домена в другой или, например, читать файлы с определенной меткой.

Создание модуля SELinux

Вы можете попробовать построить модуль, который позволяет slapd_t выполнять операции, которые появились в audit.log, Вероятно, вам нужны дальнейшие корректировки в вашем коде. использование audit2allow, а также make для этой задачи. Все команды очень хорошо документированы в соответствующих руководствах. Процесс будет выглядеть примерно так (после копирования соответствующих сообщений в audit.txt):

audit2allow -i audit.txt -m slapd -o slapd.te
make -f /usr/share/selinux/devel/Makefile load

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

Другие вопросы по тегам