BIND9 中動態連結的 DLZ 模組

BIND9 中動態連結的 DLZ 模組

BIND9 可讓您在執行時間使用驅動程式連結動態可載入區域 (DLZ) 模組dlopen。此功能的單元測試在我的環境中通過,但是當我嘗試named使用連結的已編譯共用物件檔案執行時,出現以下錯誤:

dlz_dlopen failed to open library '/usr/lib/dlz_example.so' - /usr/lib/dlz_example.so: failed to map segment from shared object

我已經在 BIND9 GitLab 中開票了這裡,其中包括有關我的具體問題的詳細資訊。

更一般地說,我想知道人們是否對嘗試載入共享物件時的常見問題有任何見解,或者有使用 DLZ 模組的經驗。我的預感是,我不了解它們的工作原理,並且存在一些愚蠢的錯誤配置導致了該問題。當然,調試技巧也值得讚賞。


ISC 知識庫頁面「在 BIND 中使用 DLZ」:https://kb.isc.org/docs/aa-00995

答案1

因此,您使用的是 Debian 或 Ubuntu,它們預設啟用 AppArmor 並限制named守護程式可以讀取、寫入、mmap 或執行的位置。任何從「錯誤」位置載入模組的嘗試都將被核心拒絕並登入dmesg

預設策略位於/etc/apparmor.d/usr.sbin.named且僅允許兩個位置:

  • /usr/lib/bind/*.so rm– 對於大多數封裝模組
  • /{usr/,}lib/@{multiarch}/samba/bind9/*.so rm– 用於 Samba AD DC 區域

可以進行自訂新增/etc/apparmor.d/local/usr.sbin.named(如檔案底部的 #include 語句所示)。該檔案沒有任何開始/結束分隔符,只有附加規則本身,例如:

/usr/local/lib/*.so rm,

若要在編輯後重新載入設定文件,請使用:

apparmor_parser --replace /etc/apparmor.d/usr.sbin.named

相關內容