디버그 기호를 사용하여 libpcre2를 /usr/local/lib에 수동으로 컴파일한 다음 /lib64에 설치된 버전을 제거했습니다. first run 을 통해 사용자로 계속 명령을 실행할 수 있지만 메시지와 함께 export LD_LIBRARY_PATH=/usr/local/lib
실행이 계속 실패합니다.sudo
sudo: 공유 라이브러리를 로드하는 중 오류가 발생했습니다. libpcre2-8.so.0: 공유 개체 파일을 열 수 없습니다. 해당 파일이나 디렉터리가 없습니다.
-E
or 옵션 으로 실행해도 -H
이런 현상이 발생합니다 . sudo - root
"su: 인증 실패"가 표시됩니다. 어떤 아이디어가 있나요?
답변1
도서관은 왜 이용되지 않나요?
안전상의 이유로 동적 링커는 LD_LIBRARY_PATH
로드되는 프로그램에 setuid 또는 setgid 비트 세트가 있는지 여부를 무시합니다. 그렇지 않으면, 원래 수행해야 할 작업 이외의 작업을 수행하기 위해 무해한 시스템/라이브러리 호출을 사용하거나 LD_LIBRARY_PATH
재정의 하는 오래된 수법이 발생합니다.LD_PRELOAD
이 트릭으로부터 보호되지 않는 setuid 루트 프로그램에 이 작업을 수행하면 루트 권한이 있는 동안 프로그램이 수행하는 작업을 제어할 수 있습니다. 그 시점에서는 수행할 수 있는 작업에 전혀 제한이 없습니다. .
맨 페이지에서 이 보안 메커니즘에 대한 설명을 찾을 수 있습니다 ld.so(8)
.
안전 실행 모드
보안상의 이유로 동적 링커가 바이너리를 안전 실행 모드에서 실행해야 한다고 결정하면 특정 환경 변수의 효과가 유효하지 않거나 수정됩니다. (자세한 내용은 아래의 개별 환경 변수에 대한 설명을 참조하십시오.) 보조 벡터(getauxval(3) 참조)의 AT_SECURE 항목에 0이 아닌 값이 있는 경우 바이너리는 안전 실행 모드에서 실행됩니다. 이 항목은 다음을 포함한 다양한 이유로 0이 아닌 값을 가질 수 있습니다.
- 프로세스의 실제 및 유효 사용자 ID가 다르거나 실제 및 유효 그룹 ID가 다릅니다. 이는 일반적으로 사용자 ID 설정 또는 그룹 ID 설정 프로그램을 실행한 결과로 발생합니다.
- 루트가 아닌 사용자 ID를 가진 프로세스는 프로세스에 기능을 부여하는 바이너리를 실행했습니다.
- Linux 보안 모듈이 0이 아닌 값으로 설정되었을 수 있습니다.
...환경 변수에 대한 자세한 설명 LD_*
과 각 변수가 안전 실행 모드에 의해 어떻게 영향을 받는지 설명합니다.
문제를 해결하는 방법
이에 대한 자신만의 파일을 추가하거나 생성한 다음 루트로 실행하여 새 라이브러리 경로가 선택되었는지 /usr/local/lib
확인할 /etc/ld.so.conf
수 있습니다... 여전히 루트에서 독립할 수 있는 실행 가능한 방법이 있다면, 바로 그것입니다!/etc/ld.so.conf.d/*.conf
ldconfig
sudo
그렇지 않으면 단일 사용자/복구 모드로 부팅하고 루트 암호를 잊어버린 것처럼 시스템에 액세스해야 할 수도 있습니다. 하지만 루트 비밀번호를 재설정할 필요는 없으며 대신 /etc/ld.so.conf[.d]
위에서 언급한 대로 수정하세요.
-E
여기서 옵션이 sudo
도움이 되지 않는 이유
매뉴얼 sudoers(5)
페이지에는 다음과 같이 나와 있습니다.
대부분의 운영 체제의 동적 링커는 setuid 실행 파일 환경에서 sudo를 포함하여 동적 링크를 제어할 수 있는 변수를 제거합니다. 운영 체제에 따라
_RLD*
,DYLD_*
, , 등 이 포함될 수 있습니다LD_*
. 이러한 유형의 변수는 sudo가 실행을 시작하기 전에 환경에서 제거되므로 sudo는 해당 변수를 유지할 수 없습니다.LDR_*
LIBPATH
SHLIB_PATH
sudo - root
당신이 나에게 말해 su: Authentication failure
. 명령과 오류 메시지가 일치하지 않습니다. 정말 도망쳤나요 su - root
? 그렇다면 루트 계정의 비밀번호가 기본적으로 잠겨 있는 Ubuntu나 다른 Linux 배포판을 실행 중일 것입니다. 이러한 배포판은 sudo
관리자 액세스에 크게 의존하는 경우가 많습니다. 배포판에 이런 경우가 있다면 이제 /lib64
.