Linux es uno de los sistemas operativos m谩s seguros que hay, pero no es m谩gico. Debes configurar la seguridad de tu sistema Linux ( o de cualquier otro sistema) correctamente para protegerlo al m谩ximo, y para eso est谩 el hardening.
En esta entrada te explicar茅 que es exactamente el hardening y cuales son los puntos principales que debemos mejorar en nuestros sistemas para evitar problemas externos.
Si quieres conocer m谩s sobre c贸mo funciona Linux y quieres saber c贸mo instalar tu propia distribuci贸n de Debian, puedes acceder de forma gratuita a mi curso b谩sico de Linux.
驴Qu茅 es el hardening en Linux?
Muchos os preguntar茅is si el hardening tiene que ver con endurecer el sistema (por la traducci贸n directa del ingl茅s) y efectivamente, es exactamente eso. Es el proceso de reducci贸n de vulnerabilidades en el sistema y recoge una serie de medidas de seguridad que se deben cumplir con el objetivo de estar preparados ante un ataque inform谩tico.
Cada vez estamos m谩s expuestos al exterior, cualquiera puede tener ya una p谩gina web o un servidor de ssh, y con ello ya puedes ser objeto de un ataque. Por este motivo, cuando eres t煤 el que debe administrar el equipo, deber谩s tomar en consideraci贸n el seguir una serie de normas para asegurar y fortificar lo m谩ximo posible tu sistema.
Consejos esenciales para configurar la seguridad y el Linux Hardening
A continuaci贸n te voy a explicar algunas de las medidas m谩s aconsejables para mejorar el hardening de tu equipo. Si consiguieses seguir todas ellas, podr铆as conseguir un equipo pr谩cticamente invulnerable.. pero eso es casi imposible. Las tecnolog铆as y los conocimientos de hacking malicioso cada vez son m谩s elevados y cada d铆a surgen nuevos problemas o brechas de seguridad que aprovechan para atacar.
Por eso es tan importante tener un conocimiento, al menos b谩sico, de lo que es el hardening y el fortalecimiento de la seguridad de tu equipo.
Contrase帽as seguras
Seguro que estar谩s pensando, otro con la misma tabarra de usar contrase帽as seguras y no reutilizables… Pues si, efectivamente esta es una de las principales medidas de seguridad de un equipo inform谩tico o de una cuenta online. Y cr茅eme que una contrase帽a segura, larga (m铆nimo 12 caracteres), con may煤sculas, min煤sculas, n煤meros y signos de puntuaci贸n es muy dif铆cil (no imposible) que sea descifrada.
En Linux hay varias formas de obligar al usuario a que utilice una contrase帽a segura, pero te voy a explicar una de ellas. En primer lugar deber谩s descargar e instalar el paquete 芦libpam-pwquality禄.
root@aprendolinux:/home/jaime# apt install libpam-pwquality
Leyendo lista de paquetes... Hecho
Creando 谩rbol de dependencias
Leyendo la informaci贸n de estado... Hecho
Se instalar谩n los siguientes paquetes adicionales:
cracklib-runtime libcrack2 libpwquality-common libpwquality1
Se instalar谩n los siguientes paquetes NUEVOS:
cracklib-runtime libcrack2 libpam-pwquality libpwquality-common libpwquality1
0 actualizados, 5 nuevos se instalar谩n, 0 para eliminar y 0 no actualizados.
Se necesita descargar 244 kB de archivos.
Se utilizar谩n 977 kB de espacio de disco adicional despu茅s de esta operaci贸n.
Despu茅s puedes acceder al fichero de configuraci贸n en 芦/etc/security/pwquality.conf禄 y modificamos las entradas que se refieren al la longitud m铆nima de la contrase帽a y al tipo de contrase帽a. En este caso, el n煤mero 4 significa que deber谩 contener las 4 opciones mencionadas justo antes.
root@aprendolinux:/home/jaime# cat /etc/security/pwquality.conf
# Minimum acceptable size for the new password (plus one if
# credits are not disabled which is the default). (See pam_cracklib manual.)
# Cannot be set to lower value than 6.
minlen = 12
#
# The minimum number of required classes of characters for the new
# password (digits, uppercase, lowercase, others).
minclass = 4
....
Ahora puedes intentar crear un nuevo usuario en tu sistema, y te pedir谩 que cumplas con todos estos requisitos.
Revisar los permisos de ficheros y directorios por defecto
Hay una serie de permisos al crear los ficheros y directorios que en Linux no se configuran por defecto correctamente, y que deber铆amos cuidar para que un posible atacante haga el menor da帽o en la m谩quina.
Por ejemplo, por defecto en Linux cuando creas un nuevo fichero se le asignan unos permisos con los que est谩s permitiendo que otro usuario del sistema pueda al menos leer ese fichero. Y cuando creas un directorio, pueden hacer un listado de los ficheros que contenga.
root@aprendolinux:/home/jaime/borrar# su - alex
alex@aprendolinux:~$ ls -las /home/jaime/
total 68
4 drwxr-xr-x 11 jaime jaime 4096 nov 16 23:56 .
4 drwxr-xr-x 4 root root 4096 nov 16 23:58 ..
4 -rw------- 1 jaime jaime 3863 nov 16 23:58 .bash_history
4 -rw-r--r-- 1 jaime jaime 220 mar 10 2021 .bash_logout
4 -rw-r--r-- 1 jaime jaime 3526 mar 10 2021 .bashrc
4 drwxr-xr-x 3 jaime jaime 4096 nov 16 23:55 borrar
Para configurar correctamente estos permisos por defecto, habr铆a que modificar el fichero 芦/etc/bash.bashrc禄 o 芦/etc/profile禄 y agregar la siguiente l铆nea al final, para cambiar la m谩scara de los ficheros y directorios.
root@aprendolinux:/home/jaime/borrar# tail -n 1 /etc/bash.bashrc
umask 027
root@aprendolinux:/home/jaime/borrar# su - jaime
jaime@aprendolinux:~$ touch fichero
jaime@aprendolinux:~$ ls -l fichero
-rw-r----- 1 jaime jaime 0 nov 17 00:06 fichero
jaime@aprendolinux:~$ mkdir dir1
jaime@aprendolinux:~$ ls -ld dir1/
drwxr-x--- 2 jaime jaime 4096 nov 17 00:06 dir1/
Con esto hemos bloqueado completamente el acceso al resto de usuarios de la m谩quina a todos los ficheros que se creen en el futuro en nuestras cuentas de usuario.
Eliminar aplicaciones y software innecesario para mejorar la seguridad y hardening en Linux
Otra de las medidas aconsejables para mantener tu equipo lo m谩s seguro posible es desinstalar y eliminar toda aplicaci贸n que ya no est茅s usando o que no tenga sentido tener instalada. Es decir, por ejemplo si tu equipo va a trabajar como un servidor Web o un almac茅n de backups.. 驴para qu茅 necesita tener el servicio 芦cups禄 que sirve para la b煤squeda y configuraci贸n de impresoras?
En Linux, si no tienes interfaz gr谩fico, puedes revisar los servicios que est谩n instalados en el equipo ( y que quiz谩s no est谩s utilizando ) con el siguiente comando:
root@aprendolinux:/home/jaime/borrar# service --status-all
[ + ] apparmor
[ - ] cgroupfs-mount
[ - ] console-setup.sh
[ + ] cron
[ + ] dbus
[ + ] docker
[ - ] hwclock.sh
[ - ] keyboard-setup.sh
[ + ] kmod
[ + ] networking
[ + ] procps
[ + ] rsyslog
[ - ] screen-cleanup
[ + ] ssh
[ - ] sudo
[ + ] udev
[ - ] x11-common
Configurar el acceso seguro por ssh a tu equipo
La mayor铆a de equipos Linux se pueden gestionar o al menor recibir accesos mediante el servicio SSH ( Secure Shell), por eso es muy importante que lo mantengas lo m谩s seguro posible. Este servicio est谩 instalado por defecto en la mayor铆a de distribuciones, pero podemos instalar el servidor completo con el paquete 芦openssh-server芦.
Para empezar la configuraci贸n de este servicio, que se encuentra en el directorio 芦/etc/ssh/sshd_config芦, debe tener unos permisos restringidos al usuario 芦root禄. Aqu铆 te explico m谩s sobre como cambiar permisos de ficheros en Linux.
root@aprendolinux:/home/jaime# ls -l /etc/ssh/sshd_config
-rw-r--r-- 1 root root 3289 jul 28 15:33 /etc/ssh/sshd_config
root@aprendolinux:/home/jaime# chmod 600 /etc/ssh/sshd_config
root@aprendolinux:/home/jaime# ls -l /etc/ssh/sshd_config
-rw------- 1 root root 3289 jul 28 15:33 /etc/ssh/sshd_config
En este fichero hay varias entradas que es importante que est茅n habilitadas, como las siguientes:
- UsePAM: Debe estar a 芦yes禄 para que se habilite el uso del m贸dulo de autenticaci贸n PAM.
- ClientAliveInterval: Establece un intervalo de tiempo de espera en segundos despu茅s del cual, si no se han recibido datos del cliente, se le enviar谩 un mensaje para solicitar una respuesta. Deber铆a establecerse entre 300 a 600 segundos ( entre 5 y 10 minutos de inactividad).
- ClientAliveCountMax: Establece el n煤mero de mensajes que se pueden enviar a un cliente sin que se reciba ninguna interacci贸n del cliente. Si se alcanza este umbral sshd desconectar谩 al cliente y finalizar谩 la sesi贸n. Este valor deber铆a ser menor que 3 para no permitir que una conexi贸n se quede abierta por un tiempo excesivamente alto.
- MaxAuthTries: Especifica el n煤mero m谩ximo de intentos de autenticaci贸n permitidos por conexi贸n. Deber铆a ser entre 3 y 6, para evitar los ataques por fuerza bruta.
- PermitEmptyPassword: Establece si se permite el acceso al equipo con usuarios que tengan la contrase帽a vacia… obviamente esto no es nada seguro y habr铆a que especificar a 芦no禄.
Configurar sudoers para el comando sudo
Ahora te voy a explicar como reforzar la seguridad y hardening de Linux configurando correctamente el super comando 芦sudo芦.
Como bien sabes, el comando sudo es muy importante para la gesti贸n y administraci贸n de tu equipo, pero a la vez es una herramienta peligrosa que se debe configurar correctamente. En caso de no hacerlo, podr铆as permitir a cualquier usuario ejecutar comandos como usuario 芦root禄 lo que podr铆a ser desastroso.
El fichero que se debe cambiar para la configuraci贸n del comando sudo est谩 en 芦/etc/sudoers芦. De forma predeterminada, se debe usar el comando 芦visudo禄 para la edici贸n del fichero de configuraci贸n.
En la parte inicial del fichero, hay que definir valores por defecto y estos son los valores que deber铆as tener en cuenta:
- use_pty: Obliga al usuario a tener una pseudo terminal abierta para lanzar comandos. As铆 no se podr铆an ejecutar comandos y dejarlos en segundo plano (lo que suele pasar cuando se infecta un equipo), ya que al terminar la sesi贸n se cerrar谩n todas las terminales del usuario.
- logfile: Si se define un fichero, podemos conseguir que se almacenen todos los comandos que son ejecutados con sudo. As铆, revisando frecuentemente este fichero, ser谩s capaz de vez si hay ejecuciones no autorizadas (o al menos intentos).
Defaults logfile="/var/log/sudo.log"
Defaults use_pty
Cambiar permisos de usuario y de grupo en sudoers
Para permitir que un usuario especifico pueda ejecutar un comando con privilegios de root, utilizando el comando sudo, se deber铆a poner una l铆nea con este formato (Con NOPASSWD delante, podemos especificar que no pida contrase帽a):
usuario <terminal>=(usuario:grupo) Comando/s
jaime ALL=(root:root) NOPASSWD:/usr/bin/apt
Cuando queremos referirnos a un grupo, deberemos especificar delante del nombre del grupo el signo de porcentaje, es decir deber铆a quedar de esta forma:
%grupo <terminal>=(usuario:grupo) Comando/s
%wheel ALL=ALL /usr/bin/mount
Instalar actualizaciones y parches
Una de las cosas buenas que tienen pr谩cticamente todas las distribuciones de Linux es que tienen una comunidad muy activa, que siempre est谩n buscando mejorar cada aplicaci贸n. Adem谩s, en caso de que se encuentre un error o un fallo de seguridad, los parches que lo solucionan no tardan mucho en publicarse.
Realizando una actualizaci贸n peri贸dica de tu sistema puedes estar seguro de que vas a estar protegido y a prueba de errores y fallos. Por lo que esta es una de las recomendaciones m谩s sencillas, y a la vez m谩s importantes que te puedo hacer.
Si quieres saber m谩s puedes ir a mi entrada sobre como actualizar tu sistema Linux.
Backups
Otra de las tareas que deber铆as realizar peri贸dicamente en cualquier sistema que est茅s manejando es la de realizar copias de seguridad. Con esto, est谩s asegurando que todo el trabajo que realizas cada d铆a, las ultimas configuraciones o actualizaciones de tus aplicaciones, o tus datos personales van a estar seguros.
Estos backups no es recomendable que los hagas en otra partici贸n del mismo disco duro, ni en otro disco duro que tengas conectado internamente en el ordenador. Esto es debido a que si hubiera un problema de fallo electrico, o incluso un incendio o inundaci贸n, podr铆as disponer siempre de una copia de tus datos m谩s importantes y as铆 conservarlos.
Hay muchas herramientas que te facilitar el almacenaje de copias de seguridad en los diferentes sistemas operativos, por lo que te recomiendo que revises cual puede ser la mejor opci贸n.
