使用 dlz_bind 为 Samba 启动 Bind9.11.3 时出错

使用 dlz_bind 为 Samba 启动 Bind9.11.3 时出错

我正在配置一个将从 Zentyal 迁移的 Samba 服务器(复制 ldap 然后降级 Zentyal)。我配置了 bind,它在我实现之前一直有效

dlz "AD DNS Zone" {
    database "dlopen /usr/lib/x86_64-linux-gnu/samba/bind9/dlz_bind9_11.so"; };

在“/etc/bind/named.conf.local”文件中,

dlz "AD DNS Zone" {
    # For BIND 9.11.0
     database "dlopen /usr/lib/x86_64-linux-gnu/samba/bind9/dlz_bind9_11.so"; };

错误

service bind9 start

是:

 /usr/local/samba/lib/bind9/dlz_bind9_11.so: failed to map segment from shared object

如果我注释掉“/etc/bind/named.conf.local”中的块,bind9 就可以工作。谢谢

答案1

虽然我没有使用 Zentyal,但我花了一天时间在 Ubuntu 18.04 上设置 Samba 4.7.6 时遇到了同样的错误,并且之前运行的 bind 9.11.3 无法启动。

对于某些文件,需要更正文件所有权(即chown root:bind ...),但主要问题是 AppArmor 阻止命名访问 dlopen 命令所需的库。

如 Samba wiki 页面所述BIND9 DLZ AppArmor 与 SELinux 集成

如果您正在使用 AppArmor 或 SELinux,则必须确保 BIND 进程具有以下文件的读取权限:

  • /usr/local/samba/private/dns.keytab
  • /usr/local/samba/private/named.conf

以及读写访问

  • 在 /usr/local/samba/private/dns/

目录及其自己的区域文件。

以下设置基于上述 Samba Wiki 页面,并更正了我的文件路径以及文档中似乎缺少的一些内容。点击链接后,此信息位于底部附近。

AppArmor 配置:

将以下内容添加到 /etc/apparmor.d/local/usr.sbin.named 的末尾(如果不存在则创建)。

# Samba DLZ and Active Directory Zones (default source installation)
/var/lib/samba/private/dns.keytab r,
/var/lib/samba/private/named.conf r,
/var/lib/samba/private/dns/** rwk,
/var/lib/samba/private/sam.ldb rwk,
/usr/lib/x86_64-linux-gnu/samba/bind9/** rm,
/usr/lib/x86_64-linux-gnu/samba/ldb/** rm,
/usr/lib/x86_64-linux-gnu/samba/** rm,
/usr/lib/x86_64-linux-gnu/ldb/** rm,

(在原始中/var/lib/samba/被映射到/usr/local/samba/)所有/usr/lib/路径均来自 bind/AppArmor 之后继续抛出的错误,您可能需要或不需要它们。

创建该文件并重新启动 AppArmor 后,启动 bind 即可再次工作。

相关内容