ld-2.17.so에 실행 권한이 없는 경우 터미널에서 while 루프가 작동하는 이유는 무엇입니까?

ld-2.17.so에 실행 권한이 없는 경우 터미널에서 while 루프가 작동하는 이유는 무엇입니까?

이전 질문에서는"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/bashlib64/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 등을 무시하고 있습니다.)

관련 정보