Administración del servidor

Servidor Linux seguro utilizando Hardening Best Practices

En la publicación anterior hablamos sobre algunos trucos de seguridad de Linux y, como dije, no podemos abarcar todo lo relacionado con el hardening (Aumento de la seguridad del sistema) de Linux en una publicación, pero estamos explorando algunos trucos para mantener el servidor Linux seguro en lugar de buscar scripts ya hechos sin entender lo que está pasando. Sin embargo, la lista es demasiado larga, así que comencemos.

 


 

Deshabilitar Ctrl-Alt-Suprimir

Esto es importante si no está protegiendo su servidor físicamente.

Si está utilizando Systems antes de CentOS 7, todo lo que tiene que hacer es comentar la siguiente línea en el archivo  /etc/inittab .

ca::ctrlaltdel:/sbin/shutdown -t3 -r now

De lo contrario, si estás utilizando CentOS 7, debes usar el siguiente comando:

$ ln -s /dev/null /etc/systemd/system/ctrl-alt-del.target

 

Sistemas de archivos montadosde forma segura

Cada uno de tus Sistemas de archivos de Linux están montados para que puedas observar los archivos dentro de él. Puedes montar tus sistemas de archivos usando diferentes opciones.

Puedes escribir estas opciones en el archivo /etc/fstab.

LABEL=/      /       ext4     defaults       1 1

La primera columna es solo una etiqueta para tu dispositivo.

En la segunda columna puedes encontrar la ubicación del sistema de archivos montado.

La tercera columna es el tipo de sistema de archivo como ext4.

La cuarta columna contiene opciones de seguridad que son las más importantes para nosotros.

Las últimas dos columnas controlan las opciones para los comandos dump y fsck.

Hay muchas maneras diferentes de controlar cómo se montan los sistemas de archivos y la siguiente lista muestra algunas de ellas:

auto                        Se montará automáticamente en el momento del arranque.

noauto                    No se montará automáticamente en el momento del arranque.

ejecutivo                Puede ejecutar binaries en este sistema de archivos.

noexec                   No puedes ejecutar binaries en este sistema de archivos.

suid                        Están permitidos los bits setuid.

nosuid                   No se permiten bits setuid

user                       Los usuarios no root pueden montar este dispositivo.

nouser                   Ningún usuario excepto el root puede montar este dispositivo.

propietary              Solo el propietario puede montar el dispositivo.

ro                           Montar dispositivo de solo lectura.

rw                          Montar el dispositivo de lectura-escritura.

Defaults                Hacer que las opciones de tu sistema de archivos sean: rw, suid, exec, auto, nouser.

Las opciones exec y noexec te permiten controlar si la ejecución de binaries está permitida o no.

Puedes montar /home de forma segura con noexec de la siguiente forma:

Ten en cuenta que esta línea evitará la ejecución de binaries en / home, por lo que, si tienes ejecutables, debe encargarte de eso.

Puede montar /tmp con la opción noexec como un paso de hardening, pero debes tomar en cuenta que algunos programas pueden no funcionar correctamente porque utilizan /tmp para ejecutarse. Puedes probar tu software con esta opción de montaje, si funciona bien, entonces está bien.

Si tienes binaries que tienen los bits setuid y setgid, y estableces la opción nosuid, los bits setuid y setgid serán ignorados.

Sólo los usuarios root pueden montar sistemas de archivos, pero si quieres que otros usuarios hagan esto, puedes configurar las opciones user, como nouser. Si configura la opción de usuario, cualquier usuario puede montar o desmontar sistemas de archivos.

No debes permitir que ningún usuario que no sea root monte los sistemas de archivos.

Al configurar las opciones ro y rw, puedes configurar tu sistema de archivos como de solo lectura o de escritura.

Puede montar cualquier sistema de archivos como de solo lectura de la siguiente forma:

/dev/hda2         /usr        ext4       ro,nodev        0 2

Puede montar /boot como de solo lectura utilizando el mismo método, pero ten en cuenta que, si llega alguna actualización del kernel, debes volver a montarla como rw para aplicar la actualización:

$ mount -o remount,rw /boot

Ya conoces las opciones de montaje y debes ser lo suficientemente inteligente como para tomar la decisión acerca de qué directorio necesita qué opción de montaje.

 



Protege el archivo /etc/services

El archivo /etc/services traduce nombres de servicio a números de puerto.

Este archivo solo puede ser escrito por root, pero puedes cometer un error sin intención.

Bueno, puedes utilizar el atributo inmutable para evitar cualquier error.

Además, eso evita la eliminación accidental o la sobreescritura de un archivo tan vital.

$ chattr +i /etc/services

 

Eliminar cuentas no utilizadas

Estas cuentas de proveedores están preinstaladas en tu sistema para alguna actividad del sistema Linux.

Si no necesitas estas cuentas, es preferible eliminarlas con el comando userdel, y estos son algunos de los usuarios que no utilizo.

Además, deberás eliminar los grupos que pertenecen a esas cuentas si existen utilizando el comando groupdel

Si revisas el archivo  /etc/passwd verás que los usuarios son eliminados.

Si ejecutas tu propio VPS o servidor, puedes configurar el bit inmutable en /etc/passwd y /etc/shadow para evitar cualquier cambio no deseado.

Si necesitas agregar nuevos usuarios al sistema o instalar un programa que agregará usuarios, primero considera eliminar la bandera inmutable primero.

 


Haciendo Hardening a scripts de Cron

Algunos scripts en /etc/cron.d no tienen los permisos de seguridad y son legibles para cualquier tipo de usuario.

Considera la posibilidad de fijar un permiso para los scripts que son responsables de ejecutar trabajos programados en nuestro servidor para que solo root pueda leerlo.

$ chmod 0700 /etc/cron.daily/*

Los usuarios normales no necesitan mirar estos scripts.

Ten en cuenta que si actualizas un programa que proporciona un archivo cron en tu sistema, considera actualizar el permiso, o puede crear un script de shell que haga el trabajo por ti.

Y lo mismo para los otros directorios cron como:

 

Asegurar los programas SUID

SUID (Set user ID) es un tipo especial de permisos de archivo dados a un archivo. Cuando desees utilizar una herramienta como el comando passwd que escribe en archivos que pertenecen a root, como /etc/ passwd y /etc/shadow, el comando passwd debe tener este permiso SUID para permitir que los usuarios normales utilicen este comando.

Puedes echar un vistazo a todos los programas que tienen este permiso y considerar eliminar ese permiso de programas innecesarios que cree que los usuarios normales no necesitarán.

$ find / -type f -user root -perm -4000 -print

Todos estos programas tienen un bit SUID y los usuarios normales pueden ejecutarlo como root. Para eliminar ese permiso, puedes usar este comando:

$ chmod a-s /bin/mount

Ten en cuenta que algunos programas necesitan ese permiso para funcionar, así que ten cuidado al hacerlo.

 


Archivos y directorios que se pueden modificar de forma global

Los directorios y archivos que se pueden escribir globalmente pueden generar serios problemas si el atacante accede a ellos.

Se le permitirá modificar o eliminar cualquier archivo, y este es un problema grave.

Para obtener todos los archivos editables en tu carpeta web, utiliza este comando:

Y directorios editables:

Puedes encontrar directorios y archivos modificables en algunas ubicaciones como /var/mail que no tienen ningún problema, pero en las carpetas web, debes tener cuidado con eso.

Puedes usar alguna herramienta de verificación de integridad como Tripwire .

Esta herramienta escaneará el sistema en busca de archivos y directores públicos que se puedan escribir y te avisará para que pueda tomar medidas al respecto.

 

Enlaces simbólicos arriesgados

Los enlaces simbólicos o symlinks son útiles si se usan con un buen propósito para simplificar tu trabajo, pero el atacante en algunos casos usa cualquier lenguaje de scripting en tu servidor para crear un enlace simbólico para viajar entre directorios y ver tus archivos, robar contraseñas y obtener acceso a todos los sitios web en el servidor, por lo que es muy importante vigilarlo.

El siguiente comando busca cualquier enlace simbólico y lo elimina.

$ find -L /home/*/public_html -type l delete

Puedes cambiar la ruta en función de las rutas de tu servidor, también puedes un script de shell para buscar esos enlaces simbólicos y enviarlos a tu correo electrónico para que puedas investigar cómo se crearon.

Hay muchas maneras de detener la creación de enlaces simbólicos, si estás utilizando PHP, puedes desactivar algunas funciones serias y aplicar enlaces simbólicos solo si el propietario coincide con tu servidor si estás usando apache.

Este truco es muy útil, especialmente cuando se trata de sistemas comprometidos.

Hay mucho que hablar sobre cómo proteger PHP; tal vez deberíamos hacer otra publicación sobre eso, pero nos mantendremos simples por ahora.

 


Asegurar archivos de registro

Tu última línea de defensa son los archivos de registro. Los archivos de registro para cada servicio en ejecución le informan todo sobre ese servicio, de modo que puedes hacer seguimiento de todo lo que sucedió en tu sistema.

En los peores escenarios (como obtener acceso de administrador), el atacante podría eliminar esos archivos de registro y dejarlo sin evidencia de lo que sucedió.

Considera la posibilidad de copiar tus archivos de registro en un lugar diferente o programar una copia de seguridad regular de los archivos de registro en otro lugar que no debería ser accesible para el atacante si obtiene acceso a tu sistema.

 

Asegurar los recursos de Linux

Asegurar los recursos de Linux es imprescindible porque los usuarios pueden poner en peligro la estabilidad de tu servidor si se les permite utilizar los recursos del servidor sin límites.

Puedes asignar la cantidad de memoria para cada usuario, cuántos procesos y otros recursos del servidor.

En /etc /security, hay un archivo llamado limits.conf, en este archivo puede especificar los límites para tus usuarios de esta manera:

La primera línea dice que, para todos los usuarios, el limite el uso de memoria es 500 MB.

La segunda línea dice que, para todos los usuarios, el límite de número de procesos es 50 procesos.

Todas estas reglas de restricción son aplicadas a todos los usuarios excepto para un usuario root.

El asterisco en ambas líneas significa todos los usuarios, y algunos sistemas tienen usuarios que ejecutan servicios como usuarios de www o mysql y todos los usuarios utilizan estos usuarios del servicio, y si aplicamos nuestras reglas de restricción también pueden provocar problemas.

Una buena solución para este problema es agregar un grupo especial y agregar nuestros usuarios a ese grupo y aplicar nuestras reglas de restricción a ese grupo.

En este caso, las reglas se aplicarán para cada usuario de este grupo y no para todos los usuarios del grupo.

 

Hardening del directorio /proc

El directorio /proc o como lo llaman  (sistema de pseudoarchivo de información de proceso) te da información acerca de los procesos que se están ejecutando actualmente. Linux está instalado de forma predeterminada para permitir que los usuarios normales vean esa información. Puedes ver qué procesos pertenecen a la raíz y a todos los demás procesos del usuario.

Antes de usar este truco, como puedes ver, el usuario normal puede ver todos los procesos, incluso los de root:

Secure Linux Server ps -ef

La opción de montaje de hidepid te permite ocultar los ID de proceso. Toma un valor de 0, 1, 2.

$ mount -o remount,rw,hidepid=2 /proc

Y puedes escribirlo en  /etc/fstab para que sea permanente, de modo que después del reinicio, los ID del proceso permanezcan ocultos.

proc    /proc    proc    defaults,hidepid=2     0 0

proc directory Hardening Best Practices

Después de ese comando, solo puedes ver tus procesos. Solo los usuarios root pueden ver todos los procesos para todos los usuarios.

$ ps -ef

Secure Linux Server ps -ef

Otra opción de montaje es gid, que permite a los usuarios de un grupo específico ver el directorio /proc.

Si el grupo al que deseas asignar el permiso tiene una ID de 100, puedes escribirlo así:

$ mount -o remount,rw,gid=100 /proc

Además, puedes escribirlo en el archivo /etc/fstab:

proc    /proc    proc    defaults,gid=100     0     0

El último consejo para ti es mantener actualizado tu sistema y software siempre, esto mantendrá tu servidor linux seguro de muchas amenazas.

Espero que estos trucos de hardening te sean útiles. Vuelve pronto.

Gracias.

Mokhtar Ebrahim
Estoy trabajando como administrador de sistemas Linux desde 2010. Soy responsable de mantener, proteger y solucionar problemas de servidores Linux para múltiples clientes de todo el mundo. Me encanta escribir guiones de shell y Python para automatizar mi trabajo.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *