Problèmes de sécurité et d'exécution des scripts de survelilance
Les scripts de surveillance vrrp_script sont essentiels pour évaluer l'état des nœuds, mais leur contexte d'exécution est souvent négligé. Une erreur fréquente consiste à exécuter ces scripts avec des privilèges excessifs ou sans contrôles de sécurité appropriés.
Problème : Utilisation de l'utilsiateur root ou permissions de fichier incorrectes. Spécifier script_user root dans global_defs présente des risques de sécurité importants. De plus, sur les systèmes avec SELinux activé (comme CentOS/RHEL 7+), le contexte de sécurité des fichiers et répertoires doit être correctement défini pour permettre l'accès au domaine keepalived_t.
Une approche plus sécurisée consiste à créer un utilisateur dédié avec des permissions minimales requises.
Configuration sécurisée d'un script de surveillance
Création de l'utilisateur et du groupe dédiés :
sudo groupadd moniteur_keepalived
sudo useradd -r -s /sbin/nologin -g moniteur_keepalived moniteur_keepalived
Préparation du répertoire pour les scripts :
sudo mkdir -p /etc/keepalived/scripts_moniteur
sudo chown moniteur_keepalived:moniteur_keepalived /etc/keepalived/scripts_moniteur
sudo chmod 750 /etc/keepalived/scripts_moniteur
Exemple de script de vérification pour un service web :
#!/bin/bash
# Vérifie si le service Apache est opérationnel
if systemctl is-active --quiet httpd; then
# Test supplémentaire de connectivité sur le port 8080
if nc -z localhost 8080 &> /dev/null; then
exit 0 # Service sain
else
exit 1 # Service actif mais port inaccessible
fi
else
exit 1 # Service non actif
fi
Attribution des permissions et contexte SELinux :
sudo chown moniteur_keepalived:moniteur_keepalived /etc/keepalived/scripts_moniteur/verif_httpd.sh
sudo chmod 750 /etc/keepalived/scripts_moniteur/verif_httpd.sh
# Si SELinux est actif
sudo chcon -t keepalived_script_exec_t /etc/keepalived/scripts_moniteur/verif_httpd.sh
Configuration correspondante dans keepalived.conf :
global_defs {
script_user moniteur_keepalived
...
}
vrrp_script verif_service_web {
script "/etc/keepalived/scripts_moniteur/verif_httpd.sh"
interval 3 # Fréquence de vérification en secondes
timeout 4 # Délai d'expiration de l'exécution
weight -20 # Impact sur la priorité en cas d'échec
rise 2 # Nombre de succès requis pour considérer le service comme stable
fall 2 # Nombre d'échecs pour déclencher une défaillance
}