¿Por qué el bucle while funciona desde la terminal si ld-2.17.so no tiene permiso ejecutable?

¿Por qué el bucle while funciona desde la terminal si ld-2.17.so no tiene permiso ejecutable?

En mi pregunta anterior,Ejecuté "chmod 666 ld-2.17.so" - ¿Cómo puedo recuperarlo?Pregunté si cambio ld-2.17.soel permiso de lectura, ¿cómo puedo recuperarlo, ya que no me permitirá ejecutar nada que requiera estas bibliotecas?

Y obtuve la respuesta de la siguiente manera,

Si tiene un archivo ejecutable en el que puede escribir, puede copiar el contenido de ld.so a ese archivo usando la lectura de bash:

while IFS= read -d '' -r line; do printf "%s\0" "$line"; done > executable-file < /lib64/ld-2.17.so

Lo intenté y funcionó. Pero lo que me confunde es por qué este whilebucle funciona si /bin/bashrequiere lib64/ld-2.17.souna biblioteca, como se puede ver a continuación:

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)

¿Alguien puede decirme por qué bashel código funcionó desde la terminal sin el /lib64/ld-2.17.so? ¿Eso también significa que también puedo crear un archivo ejecutable vacío bashdesde la terminal incluso si /lib64/ld-2.17.sono tengo permisos?

Gracias

Respuesta1

while IFS= read -d '' -r line; do 
    printf "%s\0" "$line"
done > executable-file < /lib64/ld-2.17.so

solo utiliza funciones integradas de shell, por lo que no es necesario iniciar nuevos procesos. El escenario de recuperación supone que ya tiene un shell ejecutándose; como ya está ejecutándose, sus permisos en el disco y los de sus bibliotecas ya no importan.

No podrá iniciar un nuevo shell en estas circunstancias, pero nada de lo que se está ejecutando actualmente se ve afectado por los permisos modificados.

Si el archivo que estás intentando leer tieneNopermisos, esto sólo funcionará si estás en un shell raíz; de lo contrario, la redirección ld-2.17.sofallará ya que no podrá leer un archivo ilegible a menos que sea root. (Estoy ignorando SELinux, etc. aquí).

información relacionada