我正在配置一个将从 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 即可再次工作。