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