我正在尝试为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 。 如果有效,这是你的问题,有两种方法可以解决这个问题:
您可以使用audit2allow程序来生成适当的selinux策略 。
如果你有AppArmor而不是SElinux,请参阅mgorven的答案。