¿Qué es /lib64/ld-linux-x86-64.so.2 y por qué se puede usar para ejecutar archivos?

17

Recientemente, aprendí un truco de que si un archivo carece de permisos ejecutables, podemos ejecutar ese archivo usando /lib64/ld-linux-x86-64.so.2.

Por ejemplo, para restaurar el permiso x para

-rw-r--r-- 1 root root 59K Mar  1  2017 /bin/chmod

podemos correr

/lib64/ld-linux-x86-64.so.2 /bin/chmod +x /bin/chmod

Realmente no sé cómo se puede hacer, no es algo normal, es un misterio.

Reserva Federal
fuente

Respuestas:

18

Ese es el enlazador dinámico; si lo ejecuta solo, le dirá lo que hace:

Uso: ld.so [OPTION]... EXECUTABLE-FILE [ARGS-FOR-PROGRAM...]

Ha invocado 'ld.so', el programa auxiliar para los archivos ejecutables de la biblioteca compartida. Este programa generalmente vive en el archivo /lib/ld.so, y las directivas especiales en archivos ejecutables que usan bibliotecas compartidas ELF le dicen al cargador de programas del sistema que cargue el programa auxiliar de este archivo. Este programa auxiliar carga las bibliotecas compartidas que necesita el ejecutable del programa, prepara el programa para ejecutarlo y lo ejecuta. Puede invocar este programa auxiliar directamente desde la línea de comandos para cargar y ejecutar un archivo ejecutable ELF; esto es como ejecutar ese archivo en sí mismo, pero siempre usa este programa auxiliar del archivo que especificó, en lugar del archivo del programa auxiliar especificado en el archivo ejecutable que ejecuta. Esto es principalmente útil para los encargados del mantenimiento para probar nuevas versiones de este programa auxiliar; lo más probable es que no tenía intención de ejecutar este programa.

El enlazador se utiliza para ejecutar programas vinculados dinámicamente. Cuando ejecuta chmod, el núcleo se ejecuta efectivamente /lib64/ld-linux-x86-64.so.2 chmod, como lo hizo manualmente; este último funciona incluso si el chmodbinario no es ejecutable.

Encontrará muchos más detalles sobre esto en el excelente artículo sobre cómo se ejecutan los programas: binarios ELF .

Stephen Kitt
fuente