Détails techniques sur le fonctionnement de l’agent Linux

Installation et désinstallation de l’agent

L’agent Linux se présente sous la forme d’un package dont le format dépend du système d’exploitation sur lequel il est installé (.deb, .rpm…). L’agent Cyberwatch suit les bonnes pratiques de création d’un package d’installation Linux.

L’installation de l’agent Linux sur les actifs se fait via l’exécution d’une commande d’installation à récupérer depuis l’interface Cyberwatch, via le formulaire de création d’un agent Linux. Cette commande d’installation embarque les paramètres sélectionnés dans Cyberwatch pour son installation comme par exemple : les groupes, l’URL de l’instance Cyberwatch…

L’installation de l’agent sur un système Linux passe par les étapes suivantes :

  • configuration du dépôt de l’actif cible afin qu’il ait connaissance du paquet
  • installation du paquet via le gestionnaire de l’actif, récupéré depuis le dépôt hébergé sur le serveur Cyberwatch
  • enregistrement de l’agent sur le serveur Cyberwatch à l’aide de la méthode register de l’agent

De façon unitaire, l’installation de l’agent Linux peut se faire via copier/coller de la commande d’installation proposée par Cyberwatch directement sur l’actif à superviser. Pour toute industrialisation du déploiement, il est possible d’automatiser l’installation de l’agent sur les actifs Linux à l’aide d’une solution permettant l’exécution de commande sur un ensemble d’actifs (e.g. Ansible).

La désinstallation de l’agent se fait comme tout autre package Linux classique, à l’aide des commandes prévues à cet effet suivant le gestionnaire de paquet de l’actif en question.

Optionnel : il est aussi possible de télécharger directement l’agent en fonction du type d’actif scanné :

Fonctionnement de l’agent

Sur les systèmes Linux, l’agent fonctionne à l’aide d’un service systemd et d’un timer tous deux créés lors de l’installation de l’agent. Ces deux fichiers sont présents dans le dossier /lib/systemd/system/.

Voici les fichiers relatifs au fonctionnement de l’agent Cyberwatch créés sur le système lors de l’installation :

  • /lib/systemd/system/cyberwatch-agent.timer timer systemd lancé toutes les 5 minutes
  • /lib/systemd/system/cyberwatch-agent.service service systemd déclenché par le timer et exécutant le programme cyberwatch-agent
  • /usr/bin/cyberwatch-agent fichier python d’exécution de l’agent Cyberwatch
  • /etc/cyberwatch-agent/agent.conf fichier de configuration de l’agent
  • le répertoire /var/log/cyberwatch-agent/ contenant les fichiers agent.log.*

Comme sur Windows, l’exécution de l’agent entraîne simplement une communication avec l’API de l’instance Cyberwatch qui répondra avec les éventuelles tâches à réaliser sur l’actif en question.

L’agent Linux offre des possibilités de personnalisation telles que la modification du timer ou du service systemd. Cela permet par exemple de modifier certaines permissions relatives à l’exécution de l’agent ou la fréquence d’exécution du timer.

Mises à jour de l’agent

Comme pour l’agent Windows, les changements sur l’agent Linux sont répertoriés dans l’historique des versions de l’agent Cyberwatch.

Sur les systèmes Linux, la mise à jour de l’agent est gérée via le gestionnaire de paquet de l’actif, comme un package Linux classique. En effet, lorsque Cyberwatch publie une nouvelle version de l’agent, celle-ci est mise à disposition sur le repository de l’instance on premise et est donc à disposition des actifs sur lesquels le dépôt a été configuré lors de l’installation.

Attention : si la mise à jour de l’agent se fait à la suite d’un changement de serveur de gestion, il faudra veiller à supprimer le fichier de configuration de l’agent anciennement installé : apt purge cyberwatch-agent && rm -f /etc/cyberwatch-agent/agent.conf

Autoriser l’exécution sous un autre utilisateur

Pour exécuter l’agent sous un autre utilisateur, une modification des permissions des fichiers de configuration et des journaux est nécessaire. De plus, le timer systemd doit être instancié avec le bon utilisateur :

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

Restreindre les privilèges de l’agent

Par défaut, l’agent est exécuté via systemd avec l’utilisateur root. Les privilèges de l’environnement d’exécution sont restreints au minimum nécessaire pour permettre le fonctionnement optimal de Cyberwatch.

Il est possible de configurer finement les privilèges accordés à l’agent Cyberwatch et de l’exécuter avec un utilisateur non privilégié. Cette section détaille comment procéder. Ces étapes sont valides pour les agents en versions 4.8 ou ultérieures. Ces commandes doivent être exécutées avec un utilisateur privilégié.

  1. Créer l’utilisateur non privilégié :

    export RESTRICTED_USER=cyberwatch-agent
    useradd $RESTRICTED_USER
    
  2. Désactiver le timer systemd responsable d’exécuter l’agent toutes les 5 minutes :

    systemctl disable --now cyberwatch-agent@root.timer
    
  3. Accorder à l’utilisateur non privilégié l’accès en lecture et en écriture aux fichiers de configuration et de log :

    chown $RESTRICTED_USER /etc/cyberwatch-agent -R
    chown $RESTRICTED_USER /var/log/cyberwatch-agent -R
    
  4. Activer le timer systemd de l’agent avec le nouvel utilisateur :

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

Cyberwatch est en mesure de lancer ses scans de vulnérabilité quand l’agent utilise un utilisateur non privilégié. Pour certaines opérations en revanche, comme le déploiement de correctifs, l’exécution de certains scans ou la vérification de scripts de conformité, il est nécessaire que des commandes soit exécutées en mode privilégié.

Optionnel - Permettre à l’agent d’exécuter certaines commandes avec des privilèges

Pour permettre à un utilisateur non privilégié l’exécution de certaines commandes avec des privilèges, Cyberwatch recommande d’utiliser le mécanisme sudoers.

  1. Éditer le fichier /etc/sudoers.d/cyberwatch-agent :

    sudo visudo -f /etc/sudoers.d/cyberwatch-agent
    
  2. Écrire dans le fichier les configurations souhaitées :

    # 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. Outrepasser le fichier de configuration du service systemd :

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

    Cette commande ouvre dans l’éditeur de texte du système un fichier de configuration qui sera prioritaire sur le fichier de service installé.

    Par défaut, le service systemd est configuré pour empêcher les élévations de privilèges. Il est nécessaire de désactiver ces protections pour permettre l’utilisation de sudo.

  4. Commenter les lignes suivantes :

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

    Quand activée, chacune de ces règle implique que l’option NoNewPrivileges soit activée également. Il est donc nécessaire de désactiver ces options.

  5. Sauvegarder le fichier

  6. Recharger les configurations systemd :

    systemctl daemon-reload
    

Retour en haut