실행 파일 A.bin이 libY.so 및 libZ.so를 사용하는이 시나리오를 고려하십시오. A.c, Y.c 및 Z.c는 모두 C로 작성됩니다. Z.c 및 Y.c는 각각 .so 파일로 컴파일됩니다. setuid 비트를 설정 한 후 프로그램을로드 할 수 없음
이
는 파일$ 홈/빈/A.bin이 $ 홈/lib 디렉토리/libY.so $ 홈/lib 디렉토리/libZ.so
내가 실행 (A)의 디렉토리 구조 .bin 일반 사용자로 A.bin 예상대로 정상적으로 실행됩니다. 참고 : $ LD_LIBRARY_PATH에 $ home/lib가 포함되어 있습니다.
관리자 권한 (예 : 1000보다 작은 포트에 바인딩)이 필요한 몇 가지 기능을 A.c에서 변경했습니다. A.bin, libY.so 및 libZ.so에 대한 setuid 비트를 rwsrwsrws로 설정하고 파일의 소유권을 root로 변경합니다. 내가 A.bin를 실행하려고하면, 나는 다음과 같은 오류를
ld.so.1를 얻을 : A.bin을 : 치명적 : libY.so가 : 열기 실패 : 해당 파일이나 디렉토리 이
I을
를 살해 모든 파일에서 setuid 권한을 제거하면 루트 권한이 필요한 곳에서 기능을 제외하고 바이너리 실행이 실패합니다.이 문제를 극복하는 방법은 무엇입니까?
편집 : OS는 유닉스, SUID 실행 파일이 실행 파일에 대한 소유권 및 액세스 권한을 확인, LD_LIBRARY_PATH
을 무시과 같은 몇 가지 보안 기능을 가지고 공유 라이브러리를 사용하는 변형 일부 ... 나는하지 않습니다에서 솔라리스 5.10
* 모든 * UNIX와 같은 OS는,이 setuid 바이너리 LD_LIBRARY_PATH를 무시한다, 그렇지 않으면 당신은을 통해 트럭을 운전 할 수있는 보안 구멍이다. – caf
@caf : 나는 그렇지 않은 사람을 만났습니다. 모든 setuid 바이너리는 정적으로 링크되었습니다. – Joshua