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

SLAPD не может открыть сертификат TLS

Я пытаюсь настроить TLS для SLAPD, но все равно возникает ошибка «Ошибка TLS init def ctx». Мне удалось отследить ошибку до системного вызова, когда демон пытается открыть файл сертификата CA (open("/etc/ssl/certs/ca.crt", O_RDONLY) = -1 EACCES). Он открывает файл CRT с флагом O_RDONLY и получает в качестве ответа EACCES. Однако сам файл доступен для чтения всем. Кроме того, я побежал sudo -u openldap cat /etc/ssl/certs/ca.crt и файл выводится нормально (openldap действительно является пользователем и группой демона). Любой совет?

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

Права доступа к файлу 644 принадлежат root: root, а права доступа ко всем родительским каталогам 755 принадлежат root: root. Я попытался сменить владельца / группу на openldap, а также попытался изменить права доступа на 777. Также попытался переместить файл в /, но безуспешно. Также попытался запустить с правами root, то есть без параметров -u и -g, но все равно не удалось.

Последние строки вывода strace: http://paste.ubuntu.com/1147299/

AppArmor вероятно запрещает доступ к файлу, проверьте /var/log/kern.log чтобы подтвердить это:

grep audit /var/log/kern.log

Если это так, отредактируйте /etc/apparmor.d/usr.sbin.slapd и дайте ему разрешение на этот файл.

/etc/ssl/certs/ r,
/etc/ssl/certs/* r,

Бегать sudo service apparmor reload после изменения профилей.

Это очень пахнет SELinux или другим модулем безопасности. Selinux включен? Вы можете заглянуть в /var/log/audit/audit.log для сообщений о том, что selinux заблокировал операцию. Вы также можете попробовать отключить selinux, запустив:

# setenforce 0

А теперь запускай slapd. Если это сработало, значит, это была ваша проблема, и есть два способа ее исправить:

  • Настойчиво отключите selinux. Как именно это сделать, зависит от вашего дистрибутива.
  • Создайте политику selinux, которая позволит slapd читать из сертификата.

Вы можете использовать audit2allow программа для создать соответствующую политику selinux.

См. Ответ mgorven, что делать, если у вас есть AppArmor вместо SElinux.