User Tools

Site Tools


configurar_la_ejecucion_de_archivos_en_gnu_linux

Configurar la ejecución de archivos en GNU/Linux (Binfmt_misc)

Cuando en GNU/Linux se dan permisos de ejecución a un archivo y se ejecuta, el kernel identifica por medio de la cabecera o bien extensión el tipo de fichero que es. Dependiendo del tipo que tenga el fichero ha ejecutar (binario ELF, un script, un fichero zip, etc), el kernel lo enviara al controlador pertinente encargado de procesarlo. Cuando un controlador no puede procesar un fichero la instrucción se pasa a otro controlador, uno detrás de otro. En este blob del kernel se puede ver como funciona el controlador para ejecución de scripts y binarios con formato ELF.

Binfmt_misc: Asignar aplicaciones a ficheros ejecutables por tipo

El cargador de controlador binfmt_misc nos ofrece a nivel de espacio de usuario asociar aplicaciones a tipos concretos de archivos para su ejecución. Esto permite dar permisos de ejecución a una imagen .png con chmod y ejecutarla “./imagen.png” para que se visualice con la aplicación configurada.

Limitaciones de binfmt_misc.

  • La magic string debe estar en los primeros 128bytes.
  • El campo “interpreter” no puede tener más de 127 caracteres.
  • El registro que creemos no puede superar los 1920 caracteres.

Si el directorio “/proc/sys/fs/binfmt_misc” no existe se debe montar con el siguiente comando.

mount binfmt_misc -t binfmt_misc /proc/sys/fs/binfmt_misc
 
# Si se quiere dejar configurado de manera persistente en el fichero /etc/fstab.
# none  /proc/sys/fs/binfmt_misc binfmt_misc defaults 0 0

Sintaxis.

:name:type:offset:magic:mask:interpreter:flags

# name: Nombre identificativo (no pebe tener "/").
# type: M (Reconocimiento de tipo por cabecera) / E (Reconocimiento de tipo por extensión).
# offset: Al usar M en type el offset define los bytes de la cabecera (por defecto 128)
# magic: Secuencia de bytes que debe encontrar en la cabecera. Las "magic strings" suelen empezar con el codigo hexadecimal \x0a o \xA4
# mask: (Opcional) Por defecto acepta todo (0xff), pero se puede definir una máscara para varias  "magic strings".
# interpreter: Programa que es ejecutado teniendo el fichero como primer parámetro. Debe tener la ruta completa.
# flags: Permite controlar algunos aspectos de la ejecución

Ejemplo.

Crear dos registros binfmt_misc, uno para ficheros .png (Visor de imágenes viewior) y otros para cabeceras de ficheros DOS (Wine).

echo ':viewniorpng:E::png::/usr/bin/viewnior:' > /proc/sys/fs/binfmt_misc/register
echo ':DOSWin:M::MZ::/usr/bin/wine:' > /proc/sys/fs/binfmt_misc/register

Los ficheros viewniorpng y DOSWin serán creados en /proc/sys/fs/binfmt_misc/.

cat /proc/sys/fs/binfmt_misc/DOSWin 
enabled
interpreter /usr/bin/wine
flags: 
offset 0
magic 4d5a

NOTA: El orden de creación de registros puede ser importantes, los últimos serán consultados primero.

Activar desactivar entradas registradas binfmt_misc.

echo "-1" > /proc/sys/fs/binfmt_misc/DOSWin   # Elimina la entrada DOSWin.
 
echo 0 > /proc/sys/fs/binfmt_misc/status      # Desactiva binfmt_misc
echo 1 > /proc/sys/fs/binfmt_misc/status      # Activa binfmt_misc
configurar_la_ejecucion_de_archivos_en_gnu_linux.txt · Last modified: 2020/12/25 22:57 by 127.0.0.1