SLAPD无法打开TLS证书

我正在尝试为SLAPDconfigurationTLS,但是它仍然因“TLS init def ctx failed”错误而失败。 我能够追踪到守护程序试图打开CA证书文件的系统调用( open("/etc/ssl/certs/ca.crt", O_RDONLY) = -1 EACCES )的错误。 它用O_RDONLY标志打开CRT文件并获取EACCES作为响应。 但是,文件本身是世界可读的。 另外,我运行了sudo -u openldap cat /etc/ssl/certs/ca.crt ,文件输出正常(openldap确实是守护进程的用户和组)。 有什么build议?

编辑:

文件权限是root:root所拥有的644,并且所有父目录的权限是root:root拥有的755。 我试着改变所有者/组到OpenIDap,也尝试将权限更改为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, 

修改configuration文件后,运行sudo service apparmor reload

这听起来很像SELinux或其他安全模块。 selinux是否启用? 您可以在/var/log/audit/audit.log查看指示selinux已经阻止操作的消息。 您也可以尝试运行以下命令禁用selinux:

 # setenforce 0 

现在开始slapd 。 如果有效,这是你的问题,有两种方法可以解决这个问题:

  • 持续禁用selinux。 究竟如何做到这一点取决于你的分布。
  • 创build一个允许slapd从证书中读取的selinux策略。

您可以使用audit2allow程序来生成适当的selinux策略 。

如果你有AppArmor而不是SElinux,请参阅mgorven的答案。