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/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 등을 무시하고 있습니다.)

관련 정보