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

따라서 기본적으로 AppArmor를 활성화하고 named데몬이 읽거나 쓰거나 mmap하거나 실행할 수 있는 위치를 제한하는 Debian 또는 Ubuntu를 사용하고 있습니다. "잘못된" 위치에서 모듈을 로드하려는 시도는 커널에 의해 거부되고 로그인됩니다 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

관련 정보