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

Настройте 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=audit(1372888328.397:3262): avc:  denied  { write } for  pid=1492 comm="slapd" name="slapd.log" dev=dm-0 ino=4348 scontext=unconfined_u:system_r:slapd_t:s0 tcontext=unconfined_u:object_r:var_log_t:s0 tclass=file
type=SYSCALL msg=audit(1372888328.397:3262): arch=40000003 syscall=5 success=no exit=-13 a0=1bd1018 a1=241 a2=1b6 a3=7ea191 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=unconfined_u:system_r:slapd_t:s0 key=(null)
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
type=SYSCALL msg=audit(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=unconfined_u:system_r:slapd_t:s0 key=(null)
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
type=SYSCALL msg=audit(1372888328.424:3264): arch=40000003 syscall=5 success=no exit=-13 a0=1c78270 a1=8000 a2=0 a3=0 items=0 ppid=1 pid=1493 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=337 comm="slapd" exe="/usr/sbin/slapd" subj=unconfined_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 контекст неограниченного_u: object_r: etc_t: s0-> system_u: object_r: etc_t: s0

Если вы фильтруете журналы аудита через 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 в отношении этой проблемы.