Permission denied при чтении конфигурационной директории OpenLDAP

LDAP
Столкнулся с такой загадочной проблемой: при попытке считать свою конфигурационную директорию, а именно файл cn=config.ldif, LDAP-сервер из штатной поставки Ubuntu 11.10 Oneiric страшно ругается Permission denied и спешно завершается.
Никаких объективных предпосылок для этого нет, права на чтение/запись пользователю openldap даны, sudo -u openldap cat <config_path>/cn=config.ldif отрабатывает правильно. И уж совсем странно, что будучи запущенным под рутом без опций -u и -g, slapd точно также не может получить доступ к своей конфигурации. Запустил его с strace'ом: на привилегированный порт 389 биндится, effective user id не меняет, к счастью, никаких chroot'ов без спроса не делает, но… но в итоге slapd всё равно благополучно валится:

open("/etc/openldap/domains/DOMAIN/conf/cn=config.ldif", O_RDONLY) = -1 EACCES (Permission denied)

Проблема решилась очень просто: взял исходники с openldap.org и собрал из исходников, получив совершенно адекватную рабочую версию сервера.
Ещё попробую изучить вопрос, но в любом случае предупреждаю, что в Ubuntu со штатной сборкой slapd явно что-то не так.

5 комментариев

avatar
А это не может быть какой-нибудь apparmor?
avatar
Да не, ну тогда бы он во-первых не давал читать файл пользователю openldap, а во-вторых — на AppArpmor вряд ли могла бы повлиять перекомпиляция OpenLDAP, а тем не менее по факту всё работает после этого. Есть подозрение, что нужно на cn=config.ldif выставить права 400: вполне возможно, что в Ubuntu добавили патч, который не даёт считать конфиг-директорию с «несекьюрными» правами.
avatar
И всё-таки это apparmor. Я тут пытался в ubuntu сделать то, что обычно без проблем делал в gentoo — запустить slapd с тестовым конф. файлом /tmp/test-slapd.conf на левом порту и получил этот же Permission denied. После добавления в /etc/apparmor.d/usr.sbin.slapd:
/tmp/** r,

и перезапуска apparmor всё нормально стало запускаться. Вероятно при ручной компиляции OpenLDAP у Вас slapd устанвоился не в /usr/sbin/, поэтому apparmor за ним не следил.
avatar
>и перезапуска apparmor всё нормально стало запускаться.
А я сколько с этим бился… Но даже если бы я и догадался, что это apparmor, до шага добавления соотв. правила дело бы просто не дошло: первое, что я бы сделал — это отключил его к лешему, ибо не люблю такие вещи, которые мне палки в колёса ставят. А так да, я OpenLDAP никогда не компилирую в /usr/sbin, у меня есть свой подход, когда подобный крупный «целевой» (супротив «вспомогательного» типа системынх утилит и библиотек) софт ставится в /opt/SoftwareID/VersionID, что-то вроде /opt/OpenLDAP/2.4.35
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.