![ld-2.17.so에 실행 권한이 없으면 터미널에서 while 루프를 실행할 수 있는 이유는 무엇입니까?](https://linux55.com/image/139229/ld-2.17.so%EC%97%90%20%EC%8B%A4%ED%96%89%20%EA%B6%8C%ED%95%9C%EC%9D%B4%20%EC%97%86%EC%9C%BC%EB%A9%B4%20%ED%84%B0%EB%AF%B8%EB%84%90%EC%97%90%EC%84%9C%20while%20%EB%A3%A8%ED%94%84%EB%A5%BC%20%EC%8B%A4%ED%96%89%ED%95%A0%20%EC%88%98%20%EC%9E%88%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
이전 질문에서는"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 등을 무시하고 있습니다.)