Linux, Servidores - Escrito por Juan Gabriel Covas el Martes, 11 de Noviembre de 2008 a las 14:59 pm - 1 comentario
Securizando el directorio /tmp en linux
Todos los sistemas necesitan carpetas temporales donde cualquier usuario pueda leer y escribir, PERO esas carpetas no deberían permitir la ejecución de programas o scripts. Securizando el directorio temporal /tmp evitaremos muchos hacks y ataques que se basan en poder arrancar programas en este directorio. Los “malos” podrán seguir escribiendo archivos en la carpeta, pero no podrán ejecutarlos. Securizar este directorio es probablemente una de las cosas más sencillas pero importantes a realizar en la securización de un servidor.
Este artículo es un remake (con añadidos y reorganizaciones) del realizado en inglés por eth00 en la dirección http://eth0.us
Dos consideraciones:
1. Algunos scripts de automatización de actualizaciones -como UPDATESCRIPT-o la instalación de ciertas aplicaciones pueden depender de que se permita la ejecución en /tmp, así que después de realizar esto, es posible que en el futuro necesites revertir temporalmente los cambios.
2. Conozco y utilizo algunos scripts de “securización automática de /tmp” como ELS de ServerMonkeys. Sin embargo viene muy bien comprender cómo funciona el proceso de securización internamente, porque en servidores con particiones personalizadas y más de un disco duro, estos scripts pueden no funcionar correctamente. A mí me sirvió de mucha ayuda conocer estos pasos porque así puede deshacer un terrible entuerto que me sucedió en un servidor personalizado como el que comentaba.
PASO A PASO
1) ¿ Tengo una partición para el directorio /tmp ?
# df -h |grep tmp
Si lo de arriba no muestra nada, entonces NO tienes una partición para /tmp, y puedes saltar al paso 5 para crearla.
Si el comando anterior SÍ mostró tu partición para /tmp, entonces necesitas comprobar si está montada con la opción ‘noexec’:
2) Tengo una partición para /tmp, comprobar si es ‘noexec’
# cat /etc/fstab |grep tmp
Si aparece una línea con ‘noexec’ como opción para /tmp, entonces es OK y podemos saltar al paso 6.
Si no, continúa con el paso 3 para editar el archivo /etc/fstab:
3) Editando /etc/fstab para hacer /tmp ‘noexec’
Añadir ‘noexec’ y ‘nosuid’ después de la opción ‘defaults’… Un ejemplo sería:
LABEL=/tmp /tmp ext3 defaults,noexec,nosuid,noatime 1 2
4) Aplicando los cambios SIN reiniciar y evitando el error ‘device busy’:
# mount -oremount /tmp
Comprueba que los cambios son efectivos:
# cat /proc/mounts |grep tmp
Ya que SÍ tienes una partición para /tmp, SÁLTATE el paso 5 y ve directamente al paso 6
5) Si NO tienes una partición TMP, crea una:
Esto crea una partición de más o menos 800 MB:
# cd /dev/; dd if=/dev/zero of=tmpMnt bs=1024 count=800000 800000+0 records in 800000+0 records out
Formatear la nueva partición
# mkfs.ext2 /dev/tmpMnt
Cuando pregunte sobre no ser un ‘block special device’, contesta que Sí (pulsar Y).
Hagamos una copia de los datos antiguos en /tmp:
# cp -Rp /tmp /tmp_backup
Montar el filesystem temporal que acabamos de crear:
# mount -o loop,noexec,nosuid,rw /dev/tmpMnt /tmp
Establece los permisos:
# chmod 0777 /tmp
Copiamos de vuelta los viejos archivos que guardamos:
# cp -Rp /tmp_backup/* /tmp/
Una vez que hayas hecho esto, puedes probar de reiniciar la mysql y ver si todo va bien. Hacemos esto porque mysql coloca el archivo mysql.sock en /tmp, el cual tiene que moverse. Si no, mysql puede tener problemas al arrancar.
Añade lo siguiente a /etc/fstab para que se monte automáticamente, al final:
/dev/tmpMnt /tmp ext2 loop,noexec,nosuid,rw 0 0
Comprueba que todo siga funcionando bien. Si es así, podemos eliminar la copia que realizamos en /tmp_backup
# rm -rf /tmp_backup
6) Vamos a securizar /dev/shm
En /etc/fstab, busca la línea de “montaje” para /dev/shm y cámbiala para que sea como la que sigue:
none /dev/shm tmpfs noexec,nosuid 0 0
Finalmente desmonta y monta /dev/shm para que los cambios surtan efecto:
# umount /dev/shm # mount /dev/shm
7) Vamos a borrar la vieja /var/tmp y crear un link a /tmp
Es decir, de forma que /var/tmp -> apunte a -> /tmp/
# rm -rf /var/tmp/ # ln -s /tmp/ /var/
Así que:
# ls -la /var/
nos muestra:
lrwxrwxrwx 1 root root 5 Jan 19 13:03 tmp -> /tmp/
Y ya está.
1 Comment
Hacer un comentario
Debes iniciar sesión para hacer un comentario.
RECOMENDAMOS:
LO MAS RECIENTE
- Los juegos PIPO en inglés, en PipoGames.com
- MySQL: Cómo hacer una copia de seguridad de todas las bases de datos
- De cómo recuperé una cuenta de messenger después del robo de contraseña
- Muzikomio: descargar la mejor música alternativa de sellos independientes
- Solución: messenger no recuerda la contraseña después de reiniciar (messenger, internet explorer, etc)
- Drivers para RAID ULI220 M1575 – M5288 (Nvidia)
- INND: Cómo montar tu propio servidor de news privado
- PopMonger: Cómo procesar automáticamente los rebotes de correo o “message bounces”
- Vaya Fiasco de Fiasco Awards
- Primeros pasos con un servidor linux remoto… nos dan acceso, ¿y ahora qué?
- Securizando el entorno Linux del servidor
- excelente programa no saben lo que me han ayudado gracias...
- a mi me sale es error en un server x86_64 con centos y mysql 5.x
MEMORY USAGE...
- Excelente ayuda, ahora mi consulta seria como poder acceder desde CentOS a Wind...
- excelente, me partio un archivo de 4.8 gb con 14 millones de registros y en muy ...
- Acabo de probarlo con un archivo de 3 GB y lo particionó muy rápido.
Excelent...
- el archivo era de 1.4 gb y me generó archivos de 64000 lineas 4 mb sin problemas...
- @Luix: Sí, XCache es lo mismo que EAccelerator, una "caché de opcode para PHP", ...
- Hola un saludo cordial. Buena tu guia, tengo una pregunta, xcache me puede servi...
Software - 29 / Mar / 09 - Sin comentarios
PopMonger: Cómo procesar automáticamente los rebotes de correo o “message bounces”
MÁS EN Software
- Cómo crear imágenes GIF animados fácilmente con UnFREEz
- Gif Color Mapper: cambiar un color por otro a cientos de archivos
- PIPO: los juegos para niños de más éxito
- Thunderbird: 3 razones para usar este cliente de correo electrónico
- PaintShopPro 9: El photoshop para programadores
MySQL - 6 / Oct / 09 - Sin comentarios
MySQL: Cómo hacer una copia de seguridad de todas las bases de datos
MÁS EN Servidores
- INND: Cómo montar tu propio servidor de news privado
- Primeros pasos con un servidor linux remoto… nos dan acceso, ¿y ahora qué?
- Securizando el entorno Linux del servidor
- Optimizando MySQL: Tuning-Primer y el archivo de configuración my.cnf
- Afinando la conexión a Secure Shell (SSH)
MundoGeek - 5 / Oct / 09 - Sin comentarios
De cómo recuperé una cuenta de messenger después del robo de contraseña
MÁS EN MundoGeek
- Muzikomio: descargar la mejor música alternativa de sellos independientes
- Solución: messenger no recuerda la contraseña después de reiniciar (messenger, internet explorer, etc)
- Drivers para RAID ULI220 M1575 – M5288 (Nvidia)
- Vaya Fiasco de Fiasco Awards
- Iluminar filas de una tabla con CSS
excelente tuto esta tarde haremos la prueba y mañana te aviso como nos fue