Por razones de seguridad, es recomendable denegar el permiso de ejecución en el directorio de archivos temporales /tmp. Esto se debe a que se trata de un directorio donde todo el mundo tiene permisos de lectura y escritura, por lo tanto puede ser usado para crear y ejecutar código malicioso o explotar vulnerabilidades.

En general, el directorio de archivos temporales suele ser implementado como un sistema de archivos en una partición separada. Esto se hace para evitar ataques de denegación de servicio (DoS en la jerga de seguridad informática), es decir, un atacante podría escribir archivos de tamaño arbitrario dentro del directorio temporal (no es necesario que tenga usuario en el sistema, sino que lo puede hacer abusando de algún servicio) hasta ocupar todo el espacio disponible en el disco y hacer colapsar el sistema operativo (si /tmp no estuviese alojado en una partición separada).

Por lo tanto, al estar alojado en una partición separada, se implementa la denegación de permiso ejecución directamente sobre todo el filesystem utilizando la opción de montaje "noexec". Esta opción impide la ejecución directa de binarios en el sistema de archivos, ni siquiera root puede ejecutar binarios en un filesystem montado con la opción "noexec". De esta forma se protege el directorio de archivos temporales de posibles abusos y exploits, y es una de las configuraciones básicas que se aplican en todo proceso de hardening de un servidor GNU/Linux.

Lamentablemente, el gestor de paquetes APT de Debian (apt-get, aptitude) ejecuta scripts Perl (por ejemplo debconf) dentro del directorio temporal para configurar paquetes en el momento de instalar o actualizar.

Shame on you Debian. Una pésima decisión desde el punto de vista de seguridad, si me preguntan. "Esto en CentOS no pasa" escuché decir por ahí...

En fin, si quitamos el permiso de ejecución en el directorio temporal (por ejemplo utilizando la opción "noexec") nos encontraremos con este tipo de errores:

Preconfiguring packages ...
Can't exec "/tmp/linux-base.config.75101": Permission denied at /usr/share/perl/5.10/IPC/Open3.pm line 168.
open2: exec of /tmp/linux-base.config.75101 configure 2.6.32-48squeeze5 failed at /usr/share/perl5/Debconf/ConfModule.pm line 59
linux-base failed to preconfigure, with exit status 255

"Permiso denegado" al tratar de ejecutar un archivo dentro del directorio /tmp. Por lo tanto es necesario volver atrás y dar permiso de ejecución en el sistema de archivos del directorio temporal.

root@debian6:~# mount | grep /tmp                                       
/dev/mapper/debian6-tmp on /tmp type ext4 (rw,noexec,nosuid,nodev,noatime)

Se observa que el sistema de archivos del dispositivo /dev/mapper/debian6-tmp está montado en /tmp sin permisos de ejecución (notar la opción "noexec").

Editar el archivo de información estática de los sistemas de archivos /etc/fstab y remover "noexec" de las opciones de montado de /dev/mapper/debian6-tmp.

root@debian6:~# nano /etc/fstab

Si estaba así:

rw,noexec,nosuid,nodev,noatime

Debe quedar así:

rw,nosuid,nodev,noatime

Luego, re-montar el sistema de archivos (para evitar reiniciar el sistema) con las mismas opciones que tiene en el archivo fstab, pero esta vez con permisos de ejecución:

root@debian6:~# mount -o remount,rw,exec,nosuid,nodev,noatime /dev/mapper/debian6-tmp /tmp

Ahora, /dev/mapper/debian6-tmp tiene permiso de ejecución, y no fue necesario reiniciar el sistema:

                
root@debian6:~# mount | grep /tmp
/dev/mapper/debian6-tmp on /tmp type ext4 (rw,nosuid,nodev,noatime)

Notar la ausencia de la opción "noexec", lo cual permite ejecutar binarios en el sistema de archivos.


Tal vez pueda interesarte


Compartí este artículo