Aquí escribimos unos pequeños consejos para hacer más segura una instalación Linux. Son apuntes sencillos para mejorar la seguridad de nuestro servidor dedicado:
- Actualizar el kernel cuando sale un parche que corrije un bug de seguridad.
- Estar apuntado a la lista de seguridad de Ubuntu y hacer updates en cuanto salen avisos.
- Estar apuntado a otras listas de seguridad o de los elementos que usemos en nuestro servidor (servidor de correo, CMS…)
- Cambiar diferentes opciones de PHP
- Activar el safe_mode = on de php.ini para PHP4. Eso hace que cuando se ejecuta un script que es de usuario:grupo, ese script sólo puede acceder a ficheros de usuario:grupo. Es decir, no podria hacer un cat del /etc/passwd aunque tenga permiso de lectura para todos. El safemode tampoco permite ejecutar comandos (para que no te hagan via fallos de apache ids, uname -a, y demás). A veces no es posible activar el safemode, depende de si tenemos alguna aplicación que sea incompatible con él o no (por ejemplo, algunos webmails no funcionan si activas safe_mode)
- Desactivar Register_globals (a Off) si las aplicaciones PHP que usemos están bien realizadas (es decir, deben acceder a las variables de los formularios mediante $_POST['VARIABLE']). Conviene que leas el manual de PHP relativo a register_globals para saber qué hace antes de tocar nada (http://es.php.net/register_globals).
Al respecto del safe_mode y register_globals, minskog nos comenta lo siguiente:
“Solo un apunte, si necesitas safe_mode off o globas_register a on para alguna aplicacion en concreto, y sabes que esa aplicacion está bien hecha y que el acceso a ese directorio lo controlas tú, por ejemplo gallery o vhcs , hay una directiva que te permite sobreescribir la conf de php (evidentemente por seguridad no funciona en .htaccess). Sería php_admin_flag:
php_admin_flag safe_mode off
php_admin_flag register_global onEsto te permite dejar el server con safe_mode y register_globals a nivel de server, y desactivarlos donde necesites/quieras. Reitero que NO funciona en .htaccess por seguridad, tiene que ir en la conf de apache.”
- Desactivar el Error Reporting de forma que no aparezcan por pantalla errores de PHP/Base de datos (no dando pistas de nombres de tablas, bases de datos, etc.). Para ello, cambiar las opciones display_errors, y/o error_reporting de php.ini.
- Como servidor de correo se recomienda qmail (sin fallos de seguridad desde 1997 y aun esperando que alguien lo reviente por un premio de 100.000 $). Es infinitamente más seguro que un sendmail. Otra gran opción es postfix, o no correr ningún servidor de correo si no es necesario.
- Si no vamos a utilizar remotamente mysql, añadir la opción del skip-networking en el /etc/my.cnf. Con esto conectaremos vía socket local y se dejarán de aceptar conexiones en el puerto 3306.
- Los directorios /tmp y /var/tmp montados aparte como particiones con opciones nosuid, noexec y nodev. Estas opciones evitan que los usuarios puedan ejecutar scripts o binarios en esas particiones.
- Binarios de compilación y descarga con permisos restringidos (gcc, make, wget, lynx…).
- Cambiar SSH de puerto, por ejemplo al 26 (editando el /etc/services y luego el /etc/init.d/inetd.conf o xinetd).
- Finalmente, un buen firewall (por ejemplo, shorewall) debe cerrar el acceso a todos los puertos que no debieran estar permitidos por debajo de 1024. Pese a disponer del firewall, quitar todos los servicios y desinstalar todos los paquetes no necesarios.