Update diag.sh
This commit is contained in:
parent
9bfe8e8918
commit
f6ebec1fa5
187
diag.sh
187
diag.sh
|
|
@ -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/</\</g' | sed 's/>/\>/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"
|
||||
|
|
|
|||
Loading…
Reference in New Issue