Detalles técnicos sobre el funcionamiento del agente Linux

Instalación y desinstalación del agente

El agente Linux se presenta como un paquete cuyo formato depende del sistema operativo en el que se instala (.deb, .rpm…). El agente Cyberwatch sigue las buenas prácticas de creación de un paquete de instalación Linux.

La instalación del agente Linux en los activos se realiza mediante la ejecución de un comando de instalación a recuperar desde la interfaz de Cyberwatch, a través del formulario de creación de un agente Linux. Este comando de instalación incluye los parámetros seleccionados en Cyberwatch para su instalación, como por ejemplo: los grupos, la URL de la instancia Cyberwatch…

La instalación del agente en un sistema Linux pasa por las siguientes etapas:

  • configuración del repositorio del activo objetivo para que conozca el paquete
  • instalación del paquete mediante el gestor del activo, recuperado desde el repositorio alojado en el servidor Cyberwatch
  • registro del agente en el servidor Cyberwatch mediante el método register del agente

De forma individual, la instalación del agente Linux puede realizarse copiando y pegando el comando de instalación propuesto por Cyberwatch directamente en el activo a supervisar. Para cualquier industrialización del despliegue, es posible automatizar la instalación del agente en los activos Linux utilizando una solución que permita ejecutar comandos sobre un conjunto de activos (p. ej. Ansible).

La desinstalación del agente se realiza como cualquier otro paquete Linux clásico, mediante los comandos previstos a tal efecto según el gestor de paquetes del activo en cuestión.

Opcional: también es posible descargar directamente el agente según el tipo de activo escaneado:

Funcionamiento del agente

En sistemas Linux, el agente funciona mediante un servicio systemd y un timer, ambos creados durante la instalación del agente. Estos dos archivos están presentes en el directorio /lib/systemd/system/.

A continuación se muestran los archivos relativos al funcionamiento del agente Cyberwatch creados en el sistema durante la instalación:

  • /lib/systemd/system/cyberwatch-agent.timer timer systemd lanzado cada 5 minutos
  • /lib/systemd/system/cyberwatch-agent.service servicio systemd activado por el timer y que ejecuta el programa cyberwatch-agent
  • /usr/bin/cyberwatch-agent archivo python de ejecución del agente Cyberwatch
  • /etc/cyberwatch-agent/agent.conf archivo de configuración del agente
  • el directorio /var/log/cyberwatch-agent/ que contiene los archivos agent.log.*

Como en Windows, la ejecución del agente simplemente conlleva una comunicación con la API de la instancia Cyberwatch que responderá con las posibles tareas a realizar en el activo en cuestión.

El agente Linux ofrece posibilidades de personalización como la modificación del timer o del servicio systemd. Esto permite, por ejemplo, modificar ciertos permisos relativos a la ejecución del agente o la frecuencia de ejecución del timer.

Actualizaciones del agente

Al igual que para el agente Windows, los cambios en el agente Linux se enumeran en el historial de versiones del agente Cyberwatch.

En sistemas Linux, la actualización del agente se gestiona mediante el gestor de paquetes

del activo, como un paquete Linux clásico. En efecto, cuando Cyberwatch publica una nueva versión del agente, esta se pone a disposición en el repositorio de la instancia on premise y por tanto está disponible para los activos en los que el repositorio se configuró durante la instalación.

Atención: si la actualización del agente se realiza tras un cambio del servidor de gestión, se deberá eliminar el archivo de configuración del agente previamente instalado: apt purge cyberwatch-agent && rm -f /etc/cyberwatch-agent/agent.conf

Permitir la ejecución bajo otro usuario

Para ejecutar el agente bajo otro usuario, es necesaria una modificación de los permisos de los archivos de configuración y de los logs. Además, el timer systemd debe instanciarse con el usuario correcto:

export RESTRICTED_USER=cyberwatch-agent

chown $RESTRICTED_USER /etc/cyberwatch-agent/ -R
chown $RESTRICTED_USER /var/log/cyberwatch-agent/ -R

systemctl disable --now cyberwatch-agent@root.timer
systemctl enable --now cyberwatch-agent@$RESTRICTED_USER.timer

Restringir los privilegios del agente

Por defecto, el agente se ejecuta mediante systemd con el usuario root. Los privilegios del entorno de ejecución se restringen al mínimo necesario para permitir el funcionamiento óptimo de Cyberwatch.

Es posible configurar finamente los privilegios otorgados al agente Cyberwatch y ejecutarlo con un usuario no privilegiado. Esta sección detalla cómo proceder. Estos pasos son válidos para agentes en versiones 4.8 o posteriores. Estos comandos deben ejecutarse con un usuario privilegiado.

  1. Crear el usuario no privilegiado:

    export RESTRICTED_USER=cyberwatch-agent
    useradd $RESTRICTED_USER
    
  2. Desactivar el timer systemd responsable de ejecutar el agente cada 5 minutos:

    systemctl disable --now cyberwatch-agent@root.timer
    
  3. Conceder al usuario no privilegiado acceso de lectura y escritura a los archivos de configuración y de log:

    chown $RESTRICTED_USER /etc/cyberwatch-agent -R
    chown $RESTRICTED_USER /var/log/cyberwatch-agent -R
    
  4. Activar el timer systemd del agente con el nuevo usuario:

    systemctl enable --now cyberwatch-agent@$RESTRICTED_USER.timer
    

Cyberwatch es capaz de ejecutar sus escaneos de vulnerabilidad cuando el agente usa un usuario no privilegiado. Sin embargo, para ciertas operaciones, como el despliegue de parches, la ejecución de algunos escaneos o la verificación de scripts de cumplimiento, es necesario que se ejecuten comandos en modo privilegiado.

Opcional - Permitir que el agente ejecute ciertos comandos con privilegios

Para permitir que un usuario no privilegiado ejecute ciertos comandos con privilegios, Cyberwatch recomienda usar el mecanismo sudoers.

  1. Editar el archivo /etc/sudoers.d/cyberwatch-agent:

    sudo visudo -f /etc/sudoers.d/cyberwatch-agent
    
  2. Escribir en el archivo las configuraciones deseadas:

    # Cyberwatch-agent privileges
    
    ## 'id' is the first command ran by Cyberwatch when monitoring an asset, it
    ## helps determine whether or not Cyberwatch has sudoers rights on the asset;
    
    cyberwatch-agent ALL=(ALL) NOPASSWD:SETENV: /usr/bin/id
    
    # ---
    
    ## 'apt-get/yum/pacman' are typical package managers commands, these will be used
    ## in case you ask Cyberwatch to deploy patches on your assets depending on the
    ## type of system monitored;
    
    # cyberwatch-agent ALL=(ALL) NOPASSWD:SETENV: /usr/bin/apt-get
    # cyberwatch-agent ALL=(ALL) NOPASSWD:SETENV: /usr/bin/yum
    # cyberwatch-agent ALL=(ALL) NOPASSWD:SETENV: /usr/bin/pacman
    
    # ---
    
    ## 'shutdown' will be used if you wish to perform reboots on your assets directly
    ## from Cyberwatch;
    
    cyberwatch-agent ALL=(ALL) NOPASSWD:SETENV: /usr/sbin/shutdown
    
    # ---
    
    ## 'ss' is used for ports scans, allowing to run the command with sudoers rights
    ## allows Cyberwatch to get the processes that own the ports;
    
    cyberwatch-agent ALL=(ALL) NOPASSWD:SETENV: /usr/bin/ss
    
    # ---
    
    ## 'dmidecode' is used to retrieve the BIOS metadata, the command requires sudoers
    ## rights to be run.
    
    cyberwatch-agent ALL=(ALL) NOPASSWD:SETENV: /usr/sbin/dmidecode
    
    # ---
    
    ## 'docker' is needed with sudoers rights to perform a vulnerability scan on all 
    ## found Docker images.
    
    cyberwatch-agent ALL=(ALL) NOPASSWD:SETENV: /usr/bin/docker
    
  3. Sobrescribir el archivo de configuración del servicio systemd:

    systemctl edit --full cyberwatch-agent@$RESTRICTED_USER.service
    

    Este comando abre en el editor de texto del sistema un archivo de configuración que tendrá prioridad sobre el archivo de servicio instalado.

    Por defecto, el servicio systemd está configurado para impedir elevaciones de privilegios. Es necesario desactivar estas protecciones para permitir el uso de sudo.

  4. Comentar las líneas siguientes:

    # LockPersonality=true
    # NoNewPrivileges=true
    # ProtectClock=true
    # ProtectHostname=true
    # ProtectKernelLogs=true
    # ProtectKernelTunables=true
    # RestrictAddressFamilies=AF_INET AF_INET6 AF_NETLINK AF_UNIX
    # RestrictSUIDSGID=true
    

    Cuando se activa, cada una de estas reglas implica que la opción NoNewPrivileges también esté activada. Por tanto, es necesario desactivar estas opciones.

  5. Guardar el archivo

  6. Recargar las configuraciones systemd:

    systemctl daemon-reload
    

Volver arriba

English Français Español