SLAPD 无法打开 TLS 证书

SLAPD 无法打开 TLS 证书

我正在尝试为 SLAPD 配置 TLS,但它一直失败,并显示错误“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 确实是守护进程的用户和组)。有什么建议吗?

编辑:

文件的权限为 644,所有者为 root:root,所有父目录的权限为 755,所有者为 root:root。我尝试将所有者/组更改为 openldap,还尝试将权限更改为 777。还尝试将文件移动到 /,但都没有成功。还尝试以 root 身份运行,即不使用 -u 和 -g 选项运行,但仍然失败。

strace 输出的最后几行:http://paste.ubuntu.com/1147299/

答案1

应用装甲可能拒绝访问该文件,请检查/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修改配置文件后运行。

答案2

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

# setenforce 0

现在启动slapd。如果可以运行,那么这就是你的问题,有两种方法可以解决它:

  • 永久禁用 selinux。具体如何操作取决于您的发行版。
  • 创建一个允许 slapd 读取证书的 selinux 策略。

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

如果您拥有的是 AppArmor 而不是 SElinux,请参阅 mgorven 的回答以了解该怎么办。

相关内容