
이전 질문에서는"chmod 666 ld-2.17.so"를 실행했습니다. 어떻게 복구할 수 있나요?읽기 권한을 변경할지 물었습니다 ld-2.17.so
. 이러한 라이브러리가 필요한 어떤 것도 실행할 수 없으므로 어떻게 다시 복구할 수 있습니까?
그리고 아래와 같은 답을 얻었습니다.
쓸 수 있는 실행 파일이 있는 경우 bash의 읽기를 사용하여 ld.so의 내용을 해당 파일에 복사할 수 있습니다.
while IFS= read -d '' -r line; do printf "%s\0" "$line"; done > executable-file < /lib64/ld-2.17.so
나는 그것을 시도했고 효과가 있었다. 하지만 제가 혼란스러워하는 점은 다음과 같이 라이브러리가 필요한 while
경우 이 루프가 작동하는 이유입니다./bin/bash
lib64/ld-2.17.so
ldd /bin/bash
linux-vdso.so.1 => (0x00007ffc54dee000)
libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007f6fb9bbe000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f6fb99ba000)
libc.so.6 => /lib64/libc.so.6 (0x00007f6fb95f6000)
/lib64/ld-linux-x86-64.so.2 (0x000055ec142f5000)
bash
누군가 가 없이 터미널에서 코드가 작동하는 이유를 말해 줄 수 있습니까 /lib64/ld-2.17.so
? 이는 권한이 bash
없더라도 터미널에서 빈 실행 파일을 만들 수도 있다는 뜻인가요 /lib64/ld-2.17.so
?
감사합니다
답변1
while IFS= read -d '' -r line; do
printf "%s\0" "$line"
done > executable-file < /lib64/ld-2.17.so
쉘 내장만 사용하므로 새 프로세스를 시작할 필요가 없습니다. 복구 시나리오에서는 이미 실행 중인 셸이 있다고 가정합니다. 이미 실행 중이므로 디스크에 대한 권한과 라이브러리에 대한 권한은 더 이상 중요하지 않습니다.
이러한 상황에서는 새 셸을 시작할 수 없지만 현재 실행 중인 어떤 항목도 변경된 권한의 영향을 받지 않습니다.
읽으려는 파일에아니요권한이 있는 경우 루트 쉘에 있는 경우에만 작동합니다. 그렇지 않으면 ld-2.17.so
루트가 아니면 읽을 수 없는 파일에서 읽을 수 없기 때문에 리디렉션이 실패합니다. (여기서는 SELinux 등을 무시하고 있습니다.)