*Esto
que se explica a continuación sirve para evitar que desde la particion
tmp puedan ejecutar cualquier tipo de archivo , cosa que ocurre
frecuentmente en servidores web .
Lo primero que haremos, sera comprobar que no existe la particion:
df -h | grep tmp
Si
esto no nos muestra ninguna particion /tmp, vamos a crear la nuestra,
aun que si tienes una particion /tmp debes comprobar si esta montada
como noexec
cat /etc/fstab |grep tmp
Si
esto nos muestra alguna linea que contenga /tmp y noexec, y todo esta
correcto. En caso contrario procederemos a crear una particion
cd /usr/; dd if=/dev/zero of=tmpMnt bs=1024 count=1000000
Formatearemos la particion:
/sbin/mke2fs /usr/tmpMnt
Si nos hace una pregunta respecto al formateo, responderemos que si con (y).
Tras formatear la particion, vamos a hacer un backup del directorio temporal
cp -Rp /tmp /tmpbackup
Montamos la partición:
mount -o loop,noexec,nosuid,rw /usr/tmpMnt /tmp
Cambiamos los permisos:
chmod 0777 /tmp
Restauramos los archivos antiguos:
cp -Rp /tmpbackup/* /tmp/
Una vez hecho esto, reiniciamos el servidor mysql y comprobamos que funcione correctamente
/etc/init.d/mysql restart
Si todo ha funcionado correctamente, podemos añadir la particion a /etc/fstab para que sea montada al reiniciar
vi /etc/fstab
y añadimos al final del archivo lo siguiente:
/usr/tmpMnt /tmp ext2 loop,noexec,nosuid,rw 0 0
Si
utilizamos una distro basada en redhat, podemos asegurar tambien
/dev/shm, modificando la linea de /dev/shm, para que se monte sin
permiso de ejecucion:
La linea deberia quedar asi:
none /dev/shm tmpfs noexec,nosuid 0 0
Despues borramos el directorio /var/tmp y creamos un enlace simbolico a /tmp
rm -rf /var/tmp/ y ln -s /tmp/ /var/
Y para terminar, reiniciamos el servidor para comprobar que todo funcione correctamente.
Podemos comprobar si ha funcionado, intentando ejecutar en /tmp, para ello hacemos:
cd /tmp;touch prueba;chmod 777 prueba;./prueba
Si estando como root nos devuelve un error, nuestra particion esta asegurada :)