ajout de logs plus parlant

This commit is contained in:
2026-03-16 15:28:50 +01:00
parent 1a612d0a4e
commit 9e5d7456b6
2 changed files with 56 additions and 34 deletions

View File

@@ -11,7 +11,6 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
set -u
SCRIPT_NAME="$(basename "$0")"
@@ -23,61 +22,84 @@ if [ "${EUID}" -ne 0 ]; then
exit 1
fi
extract_keys() {
local file="$1"
grep -E '^[A-Za-z_][A-Za-z0-9_]*=' "$file" | cut -d'=' -f1 | sort -u
}
check_config_drift() {
local conf_dir="/opt/monitoring/conf"
local base_conf local_conf
local found_issue=false
local reviewed_files=0
local files_requiring_action=0
log_info "audit_start" "Début de l'audit des configurations"
log_info "audit_start" "Début de l'audit des configurations locales"
while IFS= read -r base_conf; do
reviewed_files=$((reviewed_files + 1))
# Parcourir tous les fichiers .conf officiels
find "$conf_dir" -type f -name "*.conf" ! -name "*.local.conf" | while read -r base_conf; do
local_conf="${base_conf%.conf}.local.conf"
local file_name
file_name=$(basename "$base_conf")
local file_name local_file_name
file_name="$(basename "$base_conf")"
local_file_name="$(basename "$local_conf")"
# 1. Si le .local.conf n'existe pas : on le crée proprement
if [ ! -f "$local_conf" ]; then
log_notice "audit_missing_local" "Création du fichier local manquant" "file=$file_name"
# On copie le template en commentant les valeurs par défaut pour inciter à la config
cp "$base_conf" "$local_conf"
chmod 600 "$local_conf"
cp "$base_conf" "$local_conf" || {
log_error "audit_create_local_failed" \
"Impossible de créer ${local_file_name} à partir de ${file_name}"
found_issue=true
files_requiring_action=$((files_requiring_action + 1))
continue
}
chmod 600 "$local_conf" 2>/dev/null || true
log_notice "audit_missing_local" \
"Le fichier ${local_file_name} n'existait pas ; il a été créé par copie de ${file_name}"
continue
fi
# 2. Si le .local.conf existe : on compare les clés (options)
local tmp_base tmp_local
tmp_base=$(mktemp)
tmp_local=$(mktemp)
tmp_base="$(mktemp)" || fail_internal "mktemp a échoué"
tmp_local="$(mktemp)" || fail_internal "mktemp a échoué"
# Extraction des noms de variables uniquement (Clés)
grep -E '^[A-Za-z0-9_]+=' "$base_conf" | cut -d'=' -f1 | sort > "$tmp_base"
grep -E '^[A-Za-z0-9_]+=' "$local_conf" | cut -d'=' -f1 | sort > "$tmp_local"
extract_keys "$base_conf" > "$tmp_base"
extract_keys "$local_conf" > "$tmp_local"
# Options présentes dans le .conf mais absentes du .local.conf
local missing
missing=$(comm -23 "$tmp_base" "$tmp_local" | tr '\n' ' ' | xargs)
local missing obsolete
missing="$(comm -23 "$tmp_base" "$tmp_local" | xargs)"
obsolete="$(comm -13 "$tmp_base" "$tmp_local" | xargs)"
if [ -n "$missing" ]; then
log_warning "audit_keys_missing" "Nouvelles options disponibles à configurer" \
"file=${file_name%.conf}.local.conf" "keys=$missing"
if [ -n "$missing" ] || [ -n "$obsolete" ]; then
found_issue=true
fi
files_requiring_action=$((files_requiring_action + 1))
# Options présentes dans le .local.conf mais qui n'existent plus dans le .conf (Obsolètes)
local obsolete
obsolete=$(comm -13 "$tmp_base" "$tmp_local" | tr '\n' ' ' | xargs)
if [ -n "$obsolete" ]; then
log_info "audit_keys_obsolete" "Options locales obsolètes détectées" \
"file=${file_name%.conf}.local.conf" "keys=$obsolete"
log_warning "audit_file_requires_action" \
"Le fichier ${local_file_name} nécessite une vérification"
if [ -n "$missing" ]; then
log_warning "audit_keys_missing" \
"Dans ${local_file_name}, options disponibles dans ${file_name} mais absentes du local : ${missing}"
fi
if [ -n "$obsolete" ]; then
log_info "audit_keys_obsolete" \
"Dans ${local_file_name}, options présentes uniquement dans le local et à vérifier ou supprimer : ${obsolete}"
fi
else
log_info "audit_file_ok" \
"Le fichier ${local_file_name} contient les mêmes options que ${file_name}"
fi
rm -f "$tmp_base" "$tmp_local"
done
done < <(find "$conf_dir" -maxdepth 1 -type f -name "*.conf" ! -name "*.local.conf" | sort)
if [ "$found_issue" = false ]; then
log_info "audit_success" "Toutes les configurations locales sont à jour"
log_info "audit_success" \
"Toutes les configurations locales sont à jour (${reviewed_files} fichier(s) vérifié(s))"
else
log_warning "audit_requires_action" \
"Certaines configurations locales doivent être mises à jour (${files_requiring_action} fichier(s) à vérifier sur ${reviewed_files})"
fi
}