Update diag.sh

This commit is contained in:
jfontaine35 2025-02-04 10:27:18 +01:00 committed by GitHub
parent 9bfe8e8918
commit f6ebec1fa5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 159 additions and 28 deletions

187
diag.sh
View File

@ -5,10 +5,25 @@
# Configuration
LOG_FILE="/var/log/samba-ad-monitor.log"
REPORT_FILE="/tmp/samba_ad_report_$(date +%Y%m%d_%H%M%S).html"
ADMIN_EMAIL="serviceinfo@h3campus.fr"
ADMIN_EMAIL="j.fontaine@h3campus.fr"
DOMAIN_NAME=$(hostname -d)
REALM=$(samba-tool domain info $(hostname -f) | grep "Realm" | cut -d: -f2 | tr -d '[:space:]')
ADMIN_USER="Administrator"
SERVER_NAME=$(hostname)
NTP_SERVER="pool.ntp.org"
# Ports requis pour Samba AD
REQUIRED_PORTS=(
53 # DNS
88 # Kerberos
139 # NetBIOS
389 # LDAP
445 # SMB
464 # Kerberos password
636 # LDAPS
3268 # Global Catalog
3269 # Global Catalog SSL
)
# Couleurs pour le rapport HTML
COLOR_GREEN="#e6ffe6"
@ -38,6 +53,43 @@ check_ldap_tools() {
fi
}
# Vérification de la cohérence de la base de données
check_database_consistency() {
local db_checks=()
local temp_file="/tmp/dbcheck_output.txt"
log_message "Début de la vérification de la base de données AD"
# Vérification de la base de données avec dbcheck
if samba-tool dbcheck --cross-ncs > "$temp_file" 2>&1; then
db_checks+=("<tr style='background-color: $COLOR_GREEN;'><td>Base de données AD</td><td>Cohérente</td></tr>")
else
db_checks+=("<tr style='background-color: $COLOR_RED;'><td>Base de données AD</td><td>Problèmes détectés</td></tr>")
# Extraction et formatage des erreurs
local db_errors=$(cat "$temp_file" | sed 's/</\&lt;/g' | sed 's/>/\&gt;/g' | sed 's/\n/<br>/g')
db_checks+=("<tr><td colspan='2'>Erreurs détectées:<br><pre>$db_errors</pre></td></tr>")
fi
# Vérification des objets supprimés
local deleted_objects=$(samba-tool dbcheck --cross-ncs --fix --yes 2>&1 | grep "fix_all_deleted_objects")
if [ -n "$deleted_objects" ]; then
db_checks+=("<tr style='background-color: $COLOR_YELLOW;'><td>Objets supprimés</td><td>Nettoyage effectué</td></tr>")
fi
# Vérification de la réplication (si applicable dans votre environnement)
if samba-tool drs showrepl 2>/dev/null | grep -q "failed"; then
db_checks+=("<tr style='background-color: $COLOR_RED;'><td>Réplication AD</td><td>Erreurs de réplication détectées</td></tr>")
else
db_checks+=("<tr style='background-color: $COLOR_GREEN;'><td>Réplication AD</td><td>Fonctionnelle</td></tr>")
fi
# Nettoyage
rm -f "$temp_file"
echo "${db_checks[@]}"
}
# Vérification des processus Samba
check_samba_processes() {
local processes_to_check=(
@ -71,9 +123,10 @@ check_samba_processes() {
# Vérification détaillée Kerberos
check_kerberos() {
local kerberos_checks=()
local password
# Demander interactivement le mot de passe
#read -s -p "Mot de passe pour $ADMIN_USER : " password
read -s -p "Mot de passe pour $ADMIN_USER : " password
echo
local kdc_processes=$(samba-tool processes | grep "kdc_server")
@ -83,11 +136,11 @@ check_kerberos() {
kerberos_checks+=("<tr style='background-color: $COLOR_GREEN;'><td>Authentification Kerberos</td><td>Actif et Valide</td></tr>")
else
kerberos_checks+=("<tr style='background-color: $COLOR_RED;'><td>Authentification Kerberos</td><td>Problème détecté</td></tr>")
kerberos_checks+=("<tr><td colspan='2'>Le script a vérifié la présence des processus KDC et a tenté d'obtenir un ticket Kerberos avec le compte utilisateur '$ADMIN_USER'. Un problème a été détecté, probablement lié à la configuration ou au fonctionnement du service Kerberos.</td></tr>")
kerberos_checks+=("<tr><td colspan='2'>Problème avec l'authentification Kerberos pour l'utilisateur '$ADMIN_USER'.</td></tr>")
fi
else
kerberos_checks+=("<tr style='background-color: $COLOR_RED;'><td>Authentification Kerberos</td><td>Problème détecté</td></tr>")
kerberos_checks+=("<tr><td colspan='2'>Aucun processus KDC n'a été trouvé. Le service Kerberos semble être inactif ou mal configuré.</td></tr>")
kerberos_checks+=("<tr><td colspan='2'>Service KDC inactif.</td></tr>")
fi
echo "${kerberos_checks[@]}"
@ -102,13 +155,12 @@ check_ldap() {
ldap_checks+=("<tr style='background-color: $COLOR_GREEN;'><td>Annuaire LDAP</td><td>Configuré et Accessible</td></tr>")
else
ldap_checks+=("<tr style='background-color: $COLOR_RED;'><td>Annuaire LDAP</td><td>Problème de configuration</td></tr>")
ldap_checks+=("<tr><td colspan='2'>Impossible de récupérer les informations du domaine. Vérifiez la configuration Samba AD.</td></tr>")
ldap_checks+=("<tr><td colspan='2'>Impossible de récupérer les informations du domaine.</td></tr>")
fi
echo "${ldap_checks[@]}"
}
# Vérification DNS
check_dns() {
local dns_checks=()
@ -119,28 +171,113 @@ check_dns() {
dns_checks+=("<tr style='background-color: $COLOR_GREEN;'><td>Serveur DNS</td><td>Actif et Fonctionnel</td></tr>")
else
dns_checks+=("<tr style='background-color: $COLOR_RED;'><td>Serveur DNS</td><td>Problème détecté</td></tr>")
dns_checks+=("<tr><td colspan='2'>Le script a vérifié la présence des processus DNS et a tenté de résoudre le nom de domaine. Un problème a été détecté, probablement lié à la configuration ou au fonctionnement du service DNS.</td></tr>")
dns_checks+=("<tr><td colspan='2'>Problème avec le service DNS.</td></tr>")
fi
echo "${dns_checks[@]}"
}
# Vérification de la synchronisation de l'heure
check_time_sync() {
local time_checks=()
# Vérifier si ntpd ou chronyd est installé
if ! command -v ntpstat &> /dev/null && ! command -v chronyc &> /dev/null; then
time_checks+=("<tr style='background-color: $COLOR_RED;'><td>Service NTP</td><td>Non installé</td></tr>")
return
fi
# Vérifier la synchronisation avec chronyd
if command -v chronyc &> /dev/null; then
if chronyc tracking | grep -q "^Leap status.*Normal"; then
local offset=$(chronyc tracking | grep "Last offset" | awk '{print $4}')
if (( $(echo "$offset < 1.0" | bc -l) )); then
time_checks+=("<tr style='background-color: $COLOR_GREEN;'><td>Synchronisation NTP (chronyd)</td><td>Synchronisé (offset: ${offset}s)</td></tr>")
else
time_checks+=("<tr style='background-color: $COLOR_YELLOW;'><td>Synchronisation NTP (chronyd)</td><td>Offset important: ${offset}s</td></tr>")
fi
else
time_checks+=("<tr style='background-color: $COLOR_RED;'><td>Synchronisation NTP (chronyd)</td><td>Non synchronisé</td></tr>")
fi
fi
# Vérifier la synchronisation avec ntpd
if command -v ntpq &> /dev/null; then
if ntpq -p &> /dev/null; then
local offset=$(ntpq -c rv | grep offset | cut -d= -f2)
if (( $(echo "$offset < 1000" | bc -l) )); then
time_checks+=("<tr style='background-color: $COLOR_GREEN;'><td>Synchronisation NTP (ntpd)</td><td>Synchronisé (offset: ${offset}ms)</td></tr>")
else
time_checks+=("<tr style='background-color: $COLOR_YELLOW;'><td>Synchronisation NTP (ntpd)</td><td>Offset important: ${offset}ms</td></tr>")
fi
else
time_checks+=("<tr style='background-color: $COLOR_RED;'><td>Synchronisation NTP (ntpd)</td><td>Non synchronisé</td></tr>")
fi
fi
echo "${time_checks[@]}"
}
# Vérification des ports UFW
check_ufw_ports() {
local ufw_checks=()
# Vérifier si UFW est installé
if ! command -v ufw &> /dev/null; then
ufw_checks+=("<tr style='background-color: $COLOR_YELLOW;'><td>UFW</td><td>Non installé</td></tr>")
return
fi
# Vérifier si UFW est actif
if ! ufw status | grep -q "Status: active"; then
ufw_checks+=("<tr style='background-color: $COLOR_YELLOW;'><td>UFW Status</td><td>Inactif</td></tr>")
return
fi
# Vérifier chaque port requis
for port in "${REQUIRED_PORTS[@]}"; do
if ufw status | grep -qE "^$port/(tcp|udp).*ALLOW"; then
ufw_checks+=("<tr style='background-color: $COLOR_GREEN;'><td>Port $port</td><td>Ouvert</td></tr>")
else
ufw_checks+=("<tr style='background-color: $COLOR_RED;'><td>Port $port</td><td>Fermé</td></tr>")
fi
done
echo "${ufw_checks[@]}"
}
# Génération du rapport HTML
generate_html_report() {
cat << EOF > "$REPORT_FILE"
<!DOCTYPE html>
<html>
<head>
<title>Rapport Monitoring Samba AD DC</title>
<title>Rapport Monitoring Samba AD DC - $SERVER_NAME</title>
<style>
body { font-family: Arial, sans-serif; }
body { font-family: Arial, sans-serif; margin: 20px; }
table { width: 100%; border-collapse: collapse; margin-bottom: 20px; }
th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
h2 { color: #333; }
h2 { color: #333; margin-top: 20px; }
pre { white-space: pre-wrap; word-wrap: break-word; }
</style>
</head>
<body>
<h1>Rapport de Monitoring Samba - $(hostname) - $(date '+%d/%m/%Y %H:%M:%S')</h1>
<h1>Rapport de Monitoring Samba AD DC - $SERVER_NAME - $(date '+%d/%m/%Y %H:%M:%S')</h1>
<h2>Synchronisation de l'heure</h2>
<table>
$(check_time_sync)
</table>
<h2>État des ports UFW</h2>
<table>
$(check_ufw_ports)
</table>
<h2>État de la Base de Données AD</h2>
<table>
$(check_database_consistency)
</table>
<h2>Processus Samba AD</h2>
<table>
@ -152,7 +289,7 @@ generate_html_report() {
$(check_kerberos)
</table>
<h2>Serveur LDAP</h2>
<h2>Annuaire LDAP</h2>
<table>
$(check_ldap)
</table>
@ -172,7 +309,7 @@ send_email_report() {
if command -v sendmail &> /dev/null; then
(
echo "To: $ADMIN_EMAIL"
echo "Subject: Rapport Monitoring Samba - $(hostname) - $(date '+%d/%m/%Y')"
echo "Subject: Rapport Monitoring Samba AD DC - $SERVER_NAME - $(date '+%d/%m/%Y')"
echo "Content-Type: text/html"
echo ""
cat "$REPORT_FILE"
@ -181,29 +318,23 @@ send_email_report() {
elif command -v ssmtp &> /dev/null; then
(
echo "To: $ADMIN_EMAIL"
echo "Subject: Rapport Monitoring Samba - $(hostname) - $(date '+%d/%m/%Y')"
echo "Subject: Rapport Monitoring Samba AD DC - $SERVER_NAME - $(date '+%d/%m/%Y')"
echo "Content-Type: text/html"
echo ""
cat "$REPORT_FILE"
) | ssmtp "$ADMIN_EMAIL"
log_message "Rapport envoyé via ssmtp à $ADMIN_EMAIL"
else
cp "$REPORT_FILE" "/var/www/html/samba-ad-report-latest.html"
log_message "ATTENTION : Impossible d'envoyer l'email. Rapport sauvegardé dans /var/www/html/samba-ad-report-latest.html"
log_message "Aucun outil d'envoi d'email (sendmail/ssmtp) trouvé. Le rapport n'a pas été envoyé."
fi
else
log_message "Erreur: Fichier de rapport introuvable"
log_message "Le fichier de rapport $REPORT_FILE n'existe pas. Impossible d'envoyer l'email."
fi
}
# Fonction principale
main() {
check_ldap_tools
log_message "Début du monitoring Samba AD DC"
generate_html_report
send_email_report
log_message "Monitoring terminé"
}
# Exécution du script
main
# Démarrage du monitoring
log_message "Démarrage du script de monitoring"
check_ldap_tools
generate_html_report
send_email_report
log_message "Script terminé avec succès"