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、次の 2 つの場所のみが許可されます。

  • /usr/lib/bind/*.so rm– ほとんどのパッケージモジュール
  • /{usr/,}lib/@{multiarch}/samba/bind9/*.so rm– Samba AD DCゾーンの場合

カスタムの追加は、(ファイルの下部にある #include ステートメントで示されているように) 行うことができます/etc/apparmor.d/local/usr.sbin.named。このファイルには、開始/終了区切り文字はなく、次のような追加ルールのみが含まれています。

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

編集後にプロファイルを再読み込みするには、次を使用します。

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

関連情報