diff --git a/diag.sh b/diag.sh
index 6dba7ad..2da81d9 100644
--- a/diag.sh
+++ b/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+=("
| Base de données AD | Cohérente |
")
+ else
+ db_checks+=("| Base de données AD | Problèmes détectés |
")
+
+ # Extraction et formatage des erreurs
+ local db_errors=$(cat "$temp_file" | sed 's/\</g' | sed 's/>/\>/g' | sed 's/\n/
/g')
+ db_checks+=("Erreurs détectées:
$db_errors |
")
+ 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+=("| Objets supprimés | Nettoyage effectué |
")
+ 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+=("| Réplication AD | Erreurs de réplication détectées |
")
+ else
+ db_checks+=("| Réplication AD | Fonctionnelle |
")
+ 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+=("| Authentification Kerberos | Actif et Valide |
")
else
kerberos_checks+=("| Authentification Kerberos | Problème détecté |
")
- kerberos_checks+=("| 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. |
")
+ kerberos_checks+=("| Problème avec l'authentification Kerberos pour l'utilisateur '$ADMIN_USER'. |
")
fi
else
kerberos_checks+=("| Authentification Kerberos | Problème détecté |
")
- kerberos_checks+=("| Aucun processus KDC n'a été trouvé. Le service Kerberos semble être inactif ou mal configuré. |
")
+ kerberos_checks+=("| Service KDC inactif. |
")
fi
echo "${kerberos_checks[@]}"
@@ -102,13 +155,12 @@ check_ldap() {
ldap_checks+=("| Annuaire LDAP | Configuré et Accessible |
")
else
ldap_checks+=("| Annuaire LDAP | Problème de configuration |
")
- ldap_checks+=("| Impossible de récupérer les informations du domaine. Vérifiez la configuration Samba AD. |
")
+ ldap_checks+=("| Impossible de récupérer les informations du domaine. |
")
fi
echo "${ldap_checks[@]}"
}
-
# Vérification DNS
check_dns() {
local dns_checks=()
@@ -119,28 +171,113 @@ check_dns() {
dns_checks+=("| Serveur DNS | Actif et Fonctionnel |
")
else
dns_checks+=("| Serveur DNS | Problème détecté |
")
- dns_checks+=("| 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. |
")
+ dns_checks+=("| Problème avec le service DNS. |
")
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+=("| Service NTP | Non installé |
")
+ 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+=("| Synchronisation NTP (chronyd) | Synchronisé (offset: ${offset}s) |
")
+ else
+ time_checks+=("| Synchronisation NTP (chronyd) | Offset important: ${offset}s |
")
+ fi
+ else
+ time_checks+=("| Synchronisation NTP (chronyd) | Non synchronisé |
")
+ 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+=("| Synchronisation NTP (ntpd) | Synchronisé (offset: ${offset}ms) |
")
+ else
+ time_checks+=("| Synchronisation NTP (ntpd) | Offset important: ${offset}ms |
")
+ fi
+ else
+ time_checks+=("| Synchronisation NTP (ntpd) | Non synchronisé |
")
+ 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+=("| UFW | Non installé |
")
+ return
+ fi
+
+ # Vérifier si UFW est actif
+ if ! ufw status | grep -q "Status: active"; then
+ ufw_checks+=("| UFW Status | Inactif |
")
+ 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+=("| Port $port | Ouvert |
")
+ else
+ ufw_checks+=("| Port $port | Fermé |
")
+ fi
+ done
+
+ echo "${ufw_checks[@]}"
+}
+
# Génération du rapport HTML
generate_html_report() {
cat << EOF > "$REPORT_FILE"
- Rapport Monitoring Samba AD DC
+ Rapport Monitoring Samba AD DC - $SERVER_NAME
- Rapport de Monitoring Samba - $(hostname) - $(date '+%d/%m/%Y %H:%M:%S')
+ Rapport de Monitoring Samba AD DC - $SERVER_NAME - $(date '+%d/%m/%Y %H:%M:%S')
+
+ Synchronisation de l'heure
+
+
+ État des ports UFW
+
+
+ État de la Base de Données AD
+
+ $(check_database_consistency)
+
Processus Samba AD
@@ -152,7 +289,7 @@ generate_html_report() {
$(check_kerberos)
- Serveur LDAP
+ Annuaire LDAP
@@ -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"