Я пытаюсь запустить сервер 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
правило, то есть правило, которое позволяет помеченному процессу переход из одного ограниченного домена в другой или, например, для чтения файлов с определенной меткой.
Вы можете попытаться создать модуль, позволяющий 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 в отношении этой проблемы.