2013-08-08 4 views
3

(참고 : 아래의 바이너리 및 바이너리 및 라이브러리 이름은 무해한 사용자를 보호하기 위해 난독 화됩니다.) 앱은 NDA 하에서 독점적이지만 행동은 하지에 의존)리눅스 바이너리는 공유 라이브러리를 찾을 수 없지만 strace에서 실행 중일 때 작동합니다

을 나는 다음과 같은 오류를 인쇄하는 리눅스 바이너리 실행 한 때.

진 : 오류가 공유 라이브러리를로드하는 동안 : libshared.so : 공유 열 수 없습니다 오브젝트 파일 : 해당 파일 또는 디렉토리

libshared.so가 LD_LIBRARY_PATH에 있기 때문에 혼란 스럽습니다. strace binary을 실행할 때 프로그램이 인쇄를 관리하도록 라이브러리가 제대로 발견 ldd binary (즉, LDD 출력 파일 위치를 점)

  • 을 실행하는 경우에는,

    • 는 라이브러리가 제대로 발견 그것의 사용법 정보!

    strace에서 자체 vs에서 실행될 때 다르게 동작하는 응용 프로그램을 본 적이 없지만 다른 사람이 전에이 문제가 발생했을 가능성이 있습니까? 어떤 아이디어가 이것을 해결하는 방법?

    소스가 없으므로 다시 작성할 수 없습니다. strace에서 프로덕션 환경에서 앱을 실행하는 것은 아마도 비 스타터입니다. OS는 RHEL 6.2입니다.

  • 답변

    6

    (오래된 질문, 그러나 희망이 다른 사람 도움이 될 것입니다) 새로운 리눅스 설치에서

    를 LD_LIBRARY_PATH는 SUID가 설정된 프로그램의 표준 시스템 런타임 링커에서 사용되지 않습니다. strace, gdb 및 friends는 다르게 작동하며, 으로 LD_LIBRARY_PATH를 사용합니다.

    suid 프로그램의 경우 모든 라이브러리가 시스템 라이브러리 캐시에 있어야합니다. 아무것도의이없는 경우는 /etc/ld.so.conf 또는 ld.so.conf.d에 새 파일을 추가, 당신의 "실종"라이브러리

    ldconfig -p | grep <my_library_name> 
    

    를 사용하여 존재 여부 (루트로) 확인/필요에 따라 다시 작성하십시오.

    ldconfig -v 
    

    물론 필요하지 않은 경우 SUID 비트를 제거하십시오.

    +0

    흥미 롭습니다! 이것이 원래의 문제인지 다시 추적 할 것입니다. 호기심에서 SUID/LD_LIBRARY_PATH 변경에 대한 참조가 있습니까? – ajdecon

    +0

    예 - "man ld.so": ** 환경 변수 LD_LIBRARY_PATH 사용. 실행 파일이 set-user-ID/set-group-ID 바이너리 인 경우를 제외하고는 무시됩니다. ** –

    +0

    고마워요! 나에게 많은 시간을 (그리고 나의 성실 :) 저장했다) – Will