OSX 10.11.1의 쉘에서 DYLD_FALLBACK_LIBRARY_PATH를 설정할 수 없습니다


11

일반적인 @rpath 이외의 디렉토리에서 동적 라이브러리를 사용한 단위 테스트에 사용되는 쉘 스크립트에서 이전에 라이브러리를 포함하는 디렉토리를 설정하기 위해 DYLD_FALLBACK_LIBRARY_PATH를 설정할 수있었습니다. 10.11.1에서 bash는이 환경 변수를 설정하려는 시도를 무시하는 것 같습니다.

$ sh -x testscript.sh
+ DYLD_FALLBACK_LIBRARY_PATH=/Users/something/testinglibs
+ export DYLD_FALLBACK_LIBRARY_PATH
+ exec printenv

DYLD_FALLBACK_LIBRARY_PATH는 printenv의 출력에 없습니다.

이것이 10.11 쉘의 보안 관련 해킹입니까? 매뉴얼 페이지 나 온라인에서이 변경 내용을 찾을 수 없었습니다.



물론 install_name_tool은 영구적 인 솔루션입니다 (빌드 환경을 설정하기 위해 실제로 스크립트를 작성했습니다). 개발 환경에서 빠른 테스트 및 디버깅을 위해서는 라이브러리의 임시 복사본을 만들고 @rpath 변경을 해킹 한 다음 수동 변경을 잊어야하는 번거 로움이 있습니다. DYLD_FALLBACK_LIBRARY_PATH 및 DYLD_LIBRARY_PATH는 이러한 가끔 개발 / 테스트주기에 유용했습니다.
Guy

답변:


8

El Capitan에 도입 된 시스템 무결성 보호

설명서에 애플

기본적으로 모든 Apple 제공 OS X 실행 파일이 보호됩니다. (이전 문서에서)

NSTask와 함께 번들에서 헬퍼 프로세스를 시작하거나 exec (2) 명령을 호출하는 등 시스템 무결성 보호에 의해 제한된 프로세스의 하위 프로세스를 생성하면 해당 하위 프로세스의 Mach 특수 포트가 재설정됩니다. DYLD_LIBRARY_PATH와 같은 동적 링커 (dyld) 환경 변수는 보호 된 프로세스를 시작할 때 제거됩니다.

이 경우 sh는 보호됩니다


포인터 주셔서 감사합니다! SIP의 커널 및 기타 파일 시스템 보호에 중점을 두었습니다. 이 변화를 눈치 채지 못했습니다.
Guy

2
좋아, 이것은 현상의 기원을 설명하지만 설치되지 않은 라이브러리를 어떻게 테스트해야합니까? make check공유 라이브러리가 필요할 때 어떻게 엘 캐피 탄에 글 을 쓸 수 있습니까?
akim

autoconf를 통한 대부분의 make는 / usr / local에 있어야합니다. / usr / local은 여전히 ​​쓸 수 있습니다. 만약 / usr의 다른 곳에서 시도한다면 OS X (또는 Unix)에 대한 저자의 지식에 의문을 제기 할 것입니다
user151019

누군가 dyld 환경 변수가 사라지는 이유를 이해하려고 시간을 낭비한 후에 이것을 발견하면 Apple에 버그를 제기하여 dyld / SIP 상호 작용을 문서화하는 것을 고려하십시오. 나는 이미했고 버그에는 rdar : // 30755019가 있습니다. (그런 다음 다른 함정들을 문서화 할 것이라고 생각하기를 바라고있다 ...)
hmijail는 사임 자 슬픔

1
(저는이 글을 쓰는 시점에서
딜라 드
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.