Dettagli tecnici sul funzionamento dell’agent Linux
Installazione e disinstallazione dell’agent
L’agent Linux si presenta sotto forma di un pacchetto il cui formato dipende dal sistema operativo su cui viene installato (.deb, .rpm…). L’agent Cyberwatch segue le best practice di creazione di un pacchetto di installazione Linux.
L’installazione dell’agent Linux sugli asset avviene tramite l’esecuzione di un comando di installazione da recuperare dall’interfaccia Cyberwatch, tramite il modulo di creazione di un agent Linux. Questo comando di installazione include i parametri selezionati in Cyberwatch per la sua installazione, come ad esempio: i gruppi, l’URL dell’istanza Cyberwatch…
L’installazione dell’agent su un sistema Linux prevede i passaggi seguenti:
- configurazione del repository dell’asset di destinazione affinché riconosca il pacchetto
- installazione del pacchetto tramite il gestore di pacchetti dell’asset, recuperato dal repository ospitato sul server Cyberwatch
- registrazione dell’agent sul server Cyberwatch tramite il metodo
registerdell’agent
Per un singolo asset, l’agent Linux può essere installato copiando e incollando il comando di installazione proposto da Cyberwatch direttamente sull’asset da monitorare. Per una distribuzione su larga scala, è possibile automatizzare l’installazione dell’agent sugli asset Linux tramite una soluzione che consenta l’esecuzione di comandi su un insieme di asset (ad es. Ansible).
La disinstallazione dell’agent si effettua come per qualsiasi altro pacchetto Linux standard, tramite i comandi previsti a tale scopo in base al gestore di pacchetti dell’asset in questione.
Facoltativo: è inoltre possibile scaricare direttamente l’agent in base al tipo di asset scansionato:
- formato .deb (Debian, Ubuntu…)
- formato .rpm (Red Hat, CentOS, Fedora…)
Funzionamento dell’agent
Sui sistemi Linux, l’agent funziona tramite un servizio systemd e un timer, entrambi creati durante l’installazione dell’agent. Questi due file si trovano nella cartella /lib/systemd/system/.
Di seguito sono elencati i file relativi al funzionamento dell’agent Cyberwatch creati sul sistema durante l’installazione:
/lib/systemd/system/cyberwatch-agent.timertimer systemd avviato ogni 5 minuti/lib/systemd/system/cyberwatch-agent.serviceservizio systemd attivato dal timer che esegue il programmacyberwatch-agent/usr/bin/cyberwatch-agentfile Python di esecuzione dell’agent Cyberwatch/etc/cyberwatch-agent/agent.conffile di configurazione dell’agent- la directory
/var/log/cyberwatch-agent/contenente i fileagent.log.*
Come su Windows, l’esecuzione dell’agent comporta semplicemente una comunicazione con l’API dell’istanza Cyberwatch, che risponderà con gli eventuali job da eseguire sull’asset in questione.
L’agent Linux offre possibilità di personalizzazione come la modifica del timer o del servizio systemd. Ciò consente ad esempio di modificare alcune autorizzazioni relative all’esecuzione dell’agent o la frequenza di esecuzione del timer.
Aggiornamenti dell’agent
Come per l’agent Windows, le modifiche all’agent Linux sono elencate nella cronologia delle versioni dell’agent Cyberwatch.
Sui sistemi Linux, l’aggiornamento dell’agent è gestito tramite il gestore di pacchetti dell’asset, come per un pacchetto Linux standard. Quando Cyberwatch pubblica una nuova versione dell’agent, questa viene infatti resa disponibile sul repository dell’istanza on-premise ed è quindi a disposizione degli asset su cui il repository è stato configurato durante l’installazione.
Attenzione: se l’aggiornamento dell’agent avviene in seguito a un cambio del server di gestione, è necessario eliminare il file di configurazione dell’agent installato in precedenza: apt purge cyberwatch-agent && rm -f /etc/cyberwatch-agent/agent.conf
Consentire l’esecuzione con un altro utente
Per eseguire l’agent con un altro utente, è necessario modificare le autorizzazioni dei file di configurazione e dei log. Inoltre, il timer systemd deve essere istanziato con l’utente corretto:
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
Limitare i privilegi dell’agent
Per impostazione predefinita, l’agent viene eseguito tramite systemd con l’utente root. I privilegi dell’ambiente di esecuzione sono limitati al minimo necessario per consentire il funzionamento ottimale di Cyberwatch.
È possibile configurare in modo dettagliato i privilegi concessi all’agent Cyberwatch ed eseguirlo con un utente non privilegiato. Questa sezione descrive come procedere. Questi passaggi sono validi per gli agent in versione 4.8 o successive. Questi comandi devono essere eseguiti con un utente privilegiato.
Creare l’utente non privilegiato:
export RESTRICTED_USER=cyberwatch-agent useradd $RESTRICTED_USERDisattivare il timer systemd responsabile dell’esecuzione dell’agent ogni 5 minuti:
systemctl disable --now cyberwatch-agent@root.timerConcedere all’utente non privilegiato l’accesso in lettura e scrittura ai file di configurazione e di log:
chown $RESTRICTED_USER /etc/cyberwatch-agent -R chown $RESTRICTED_USER /var/log/cyberwatch-agent -RAttivare il timer systemd dell’agent con il nuovo utente:
systemctl enable --now cyberwatch-agent@$RESTRICTED_USER.timer
Cyberwatch è in grado di avviare le proprie scansioni delle vulnerabilità quando l’agent utilizza un utente non privilegiato. Per alcune operazioni, invece, come la distribuzione delle patch, l’esecuzione di alcune scansioni o la verifica degli script di conformità, è necessario che alcuni comandi vengano eseguiti in modalità privilegiata.
Facoltativo - Consentire all’agent di eseguire alcuni comandi con privilegi
Per consentire a un utente non privilegiato di eseguire alcuni comandi con privilegi, Cyberwatch consiglia di utilizzare il meccanismo sudoers.
Modificare il file
/etc/sudoers.d/cyberwatch-agent:sudo visudo -f /etc/sudoers.d/cyberwatch-agentScrivere nel file le configurazioni desiderate:
# 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/dockerSovrascrivere il file di configurazione del servizio systemd:
systemctl edit --full cyberwatch-agent@$RESTRICTED_USER.serviceQuesto comando apre nell’editor di testo del sistema un file di configurazione che avrà la priorità sul file di servizio installato.
Per impostazione predefinita, il servizio systemd è configurato per impedire l’elevazione dei privilegi. È necessario disattivare queste protezioni per consentire l’utilizzo di sudo.
Commentare le righe seguenti:
# LockPersonality=true # NoNewPrivileges=true # ProtectClock=true # ProtectHostname=true # ProtectKernelLogs=true # ProtectKernelTunables=true # RestrictAddressFamilies=AF_INET AF_INET6 AF_NETLINK AF_UNIX # RestrictSUIDSGID=trueQuando è attivata, ciascuna di queste regole implica che anche l’opzione
NoNewPrivilegessia attivata. È quindi necessario disattivare queste opzioni.Salvare il file
Ricaricare le configurazioni systemd:
systemctl daemon-reload