Bash

  • Una de las premisas básicas en el proceso de hardening de un servidor Web consiste en minimizar la cantidad de directorios donde el mismo tiene escritura. De esta forma se minimizan la cantidad de directorios donde un atacante pueda explotar una vulnerabilidad que le permita subir archivos (los cuales pueden ser shells, backdoors, etc.) Para ello, es necesario determinar todos los directorios donde el usuario bajo el que corre el demonio del servidor Web tiene acceso de escritura a nivel filesystem.

    En este artículo presento un script Bash que realiza dicha tarea en servidores GNU/Linux. Tal vez los usuarios avanzados se preguntarán por qué no usar directamente find, el cual es capaz de examinar y testear los atributos de los archivos tales como permisos UNIX, usuario (UID) y grupo (GID). Esto estaría bien cuando se tiene un filesystem que utiliza los permisos UNIX tradicionales, pero si utilizamos ACLs, find se queda "corto", ya que no posee la funcionalidad necesaria para examinarlas.

  • Los sysadmins GNU/Linux amamos todas las herramientas que automaticen tareas y simplifiquen la administración de los servidores. Este artículo presenta un script que he desarrollado para verificar a diario las actualizaciones de paquetes disponibles en los repositorios y enviar un mail con el resumen.

  • En este artículo comparto un pequeño script Bash para resolver de forma reversa (reverse lookup) todas las direcciones IPv4 de una clase C pasada como parámetro. Es decir, mapear las direcciones IPv4 a sus nombres de host (hostnames) correspondientes, consultando a los servidores de nombre (DNS) configurados en el sistema.

  • El artículo Cómo crear tu propia autoridad certificante (CA) explica cómo crear tu propia autoridad certificante para generar y firmar certificados para utilizar con SSL. Aquí presento un script para verificar periodicamente la validez de los certificados x509. La función del script es notificar por correo electrónico cuando un certificado está próximo a expirar, para poder renovarlo con tiempo y no sufrir problemas o interrupciones de los servicios que utilizan SSL (evitar dolores de cabeza).

  • En este artículo presento un script Bash para verificar el estado de un enlace. Lo he desarrollado para detectar microcortes de red en uno de mis servidores y recolectar evidencia para efectuar un eventual reclamo con el proveedor del servicio.

  • Un problema que tenemos muchos administradores de sistemas GNU/Linux es cómo ejecutar tareas de mantenimiento de forma eficiente sobre muchos servidores al mismo tiempo. Desde el momento en que nuestra organización pasa a tener varias decenas de servidores, ejecutar operaciones de mantenimiento simples, como por ejemplo actualizar el sistema, pasan a ser tareas tediosas que consumen tiempo y recursos humanos.

    Claro que muchas de las tareas de mantenimiento de un sistema operativo se pueden automatizar utilizando scripts y tareas programadas. Sin embargo algunas requieren intervención humana: un claro ejemplo es actualizar el sistema. No se puede actualizar el sistema a ciegas y esperar que todo funcione. Muchas actualizaciones requieren reinicio de servicios o nuevas versiones de archivos de configuración. Sin contar con los conflictos producidos por aplicaciones a medida atadas a versiones específicas de paquetes. Por ello el administrador de sistemas debe examinar lo que cada gestor de paquetes ofrece actualizar, para evaluar si se debe proceder o se requiere alguna clase de intervención manual. Además el administrador de sistemas tiene en cuenta si una actualización requiere reiniciar servicios (lo que tal vez requiera posponer la actualización de un servidor para no afectar la operatoria de la organización) y durante la actualización debe actuar ante incompatibilidades producto de nuevas versiones de archivos de configuración.

    Pero, a pesar de estas limitaciones, es posible automatizar el proceso de autenticación en cada sistema remoto. Utilizando un usuario con autenticación SSH con clave pública y capacidad de actualización del sistema, se evita que el administrador deba abrir decenas de sesiones SSH remotas para lanzar las actualizaciones. De esta forma se agiliza el proceso, sin perder control sobre el mismo (como veremos).

    En este artículo voy a explicar detalladamente cómo, utilizando un servidor de administración centralizado, elaborar una arquitectura de autenticación que permita lanzar actualizaciones de múltiples servidores remotos desde un simple script Bash.

  • Finalmente he liberado la última versión de mi sistema de actualización de servidores en paralelo, y al mismo tiempo lo he bautizado como "updatemyfarm" (actualiza mi granja, en español). Elegí el término "granja" porque creo representa mejor el sentido de heterogeneidad. Este script apunta a aquellos entornos con diferentes distribuciones y versiones, donde otras soluciones pueden tener problemas de compatibilidad a causa de las plataformas que utilizan. Por otro lado no está orientado a clusters, aunque podría utilizarse perfectamente para este fin.

    Esta última versión cuenta con varias correcciones de bugs y muchas mejoras, ya que ahora el proceso se realiza completamente en paralelo: primero se actualizan los repositorios de los sistemas basados en Debian; luego se ofrece al usuario el listado de servidores con actualizaciones disponibles; y finalmente se lanzan todas las actualizaciones al mismo tiempo.

    Pueden descargar una copia del mismo desde su repositorio en GitHub: linuxitux/updatemyfarm