A partir de la versión 6.0 de OpenBSD, W^X está habilitado por defecto. Se trata de una protección de memoria a nivel sistema operativo donde cada página del espacio de memoria de un proceso o el propio kernel tiene permiso de escritura o ejecución, pero no ambos. Sin embargo para que funcionen ciertas aplicaciones, puntualmente Python, es necesario deshabilitar esta protección.
Al tratar de ejecutar el binario python
, la consola retorna "Permission denied". Siendo que el usuario actual tiene permisos de ejecución sobre el mismo.
# python -bash: /usr/bin/python: Permission denied #
Es más, el binario tiene permiso de ejecución para todo el mundo:
# ll /usr/bin/python lrwxr-xr-x 1 root wheel 24B Sep 1 10:20 /usr/bin/python -> /usr/local/bin/python2.7 # ll /usr/local/bin/python2.7 -rwxr-xr-x 1 root bin 5.3K Jul 25 2016 /usr/local/bin/python2.7
Pero al examinar el log de mensajes del kernel, se encuentra el siguiente error:
Oct 20 08:09:12 obsd /bsd: /usr/bin/python(73276): W^X binary outside wxallowed mountpoint
Esto significa que el proceso necesita páginas en su espacio de memoria con permisos de escritura y ejecución. Para solucionarlo, se debe montar el sistema de archivos que contiene al ejecutable con la opción "wxallowed".
# cat /etc/fstab c491860c712f59cb.b none swap sw c491860c712f59cb.a / ffs rw 1 1
Esta opción típicamente se aplica sobre el sistema de archivos /usr/local
. Sin embargo, en sistemas pequeños (con un único FS) debe aplicarse sobre el sistema de archivos raíz. Editar la configuración de montaje se filesystems:
# nano /etc/fstab
Agregar la opción "wxallowed" para el sistema de archivos en cuestión:
c491860c712f59cb.b none swap sw c491860c712f59cb.a / ffs rw,wxallowed 1 1
Reiniciar el sistema.
Tal vez pueda interesarte