단일 NSS 라이브러리를 두 번(또는 여러 번) 사용하는 일반적인 솔루션이 있습니까?
제 경우에는 두 개의 LDAP 서버가 있습니다. 하나는 컴퓨터 자체에 로컬이고 다른 하나는 원격입니다. NSS를 사용하여 작업해야 합니다(필요한 항목을 로컬에서 사용할 수 없는 경우 원격 NSS를 사용합니다).
현재 해결되었으므로 단일 라이브러리(PADL/nss_ldap)이 두 번 빌드됩니다. 두 경우 모두 이전 빌드는 소스에서 발생하는 모든 이벤트를 다른 것으로 변경하는 sed
데 사용됩니다 . nss_ldap
각 경우에 대해 다른 텍스트(예: nss_ldap_1
및 nss_ldap_2
)를 사용하십시오. 그에 따라 빌드 결과의 이름이 변경됩니다. 두 바이너리 모두 대상 시스템에 저장되고 /etc/nsswitch.conf
.
또한 두 라이브러리 모두 서로 다른 구성 파일을 사용합니다 /etc/
(그렇지 않으면 의미가 없습니다!). 그러나 configure
이는 빌드하기 전에 라이브러리의 실행 스크립트에서 매개변수를 변경하기만 하면 쉽게 수행할 수 있습니다.
그러나 그것은 "옳다고 느껴지지" 않습니다. 다른 방법이 있나요?
NSS 라이브러리 자체가 두 개의 "단일 인스턴스"로 작동할 수 있도록 여러 구성을 지원할 수 있다고 상상할 수 있습니다. 그러나 라이브러리의 작성자가 아닌 경우에는 이를 달성하기 어렵습니다. 또한 두 구성 모두에 대해 라이브러리에 대한 후속 호출이 필요하며 그 사이에 다른 라이브러리를 사용하는 것이 더 나을 수도 있습니다.
또 다른 접근 방식은 구성이 다른 다른 라이브러리를 호출하는 간단한 전달자를 작성하는 것입니다. 그러나 이를 위해서는 다른 라이브러리가 어떤 방식으로든 재구성할 수 있어야 합니다( /etc
포워더에서 일부 고정 구성 파일을 사용하는 경우 첫 번째 버전처럼 작동합니다). 그리고 그것은 한 번만 작동합니다. 라이브러리를 세 번 이상 사용하면 이제 리피터 자체가 동일한 문제를 반환합니다.
답변1
불행하게도 GNU libc의 NSS 구현을 사용하면 이 작업을 수행할 수 없습니다. 근본적인 문제를 발견하셨으니 다른 각도에서 설명하겠습니다. nsswitch.conf
구문에서는 NSS 서비스 모듈에 추가 정보를 제공하는 것을 허용하지 않으므로 반복적으로 호출해도 다르게 동작하지 않습니다. 따라서 libc 측과 모듈 측 모두에서 지원되지 않습니다. 게다가 glibc는 또한보다서비스 모듈을 공유 객체에 직접 연결할 수 있도록 유지하면 링크 스푸핑이 방지됩니다.
수행할 수 있는 작업은 두 LDAP 디렉터리 모두에서 메타 디렉터리를 생성하고 이를 NSS 구성에서 사용하는 것입니다. OpenLDAP는 이것을 잘 지원합니다. slapd-meta(5)
매뉴얼 페이지나 이 항목을 참조하십시오.합병개요예를 들어. 물론 slapd
둘 중 하나를 구성할 수 있으면 이를 위해 새 인스턴스를 만들 필요가 없습니다.
(가능하면 nss-ldap
사용하지 마세요.)nss-ldapd