diff --git a/samba_backup_restore.sh b/samba_backup_restore.sh
index 3680661..7194ae7 100644
--- a/samba_backup_restore.sh
+++ b/samba_backup_restore.sh
@@ -19,309 +19,398 @@ DOMAIN="h3adm.lan"
LOG_FILE="/var/log/samba_backup.log"
MAIL_TO="admin@h3campus.fr" # Adresse email pour les notifications
-# Mode automatique (défaut à false)
-AUTO_MODE=false
-RETENTION_DAYS=30 # Nombre de jours de conservation des backups
-# Fonction de journalisation
+# Ports requis pour Samba AD
+REQUIRED_PORTS=(
+ 53 # DNS
+ 88 # Kerberos
+ 123 # NTP
+ 139 # NetBIOS
+ 389 # LDAP
+ 445 # SMB
+ 464 # Kerberos password
+ 636 # LDAPS
+ 3268 # Global Catalog
+ 3269 # Global Catalog SSL
+ 8385 # Port utilisé par Syncthing pour l'interface du serveur de relais (STRelaySrv)
+ 22000 # Port utilisé par Syncthing pour les transferts de fichiers
+ 22001 # Port utilisé par Syncthing pour les connexions relayées
+ 22027 # Port utilisé par Syncthing pour la découverte globale
+ 161 # Port utilisé par SNMP (Simple Network Management Protocol) pour les requêtes de gestion
+)
+
+# Couleurs pour le rapport HTML
+COLOR_GREEN="#e6ffe6"
+COLOR_RED="#ffe6e6"
+COLOR_YELLOW="#fffae6"
+
+# Fonction de logging
log_message() {
- local message="$1"
- local level="$2"
+ echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
+}
+
+# Vérification des outils LDAP
+check_ldap_tools() {
+ local ldap_packages=("ldap-utils")
+ local missing_packages=()
+
+ for pkg in "${ldap_packages[@]}"; do
+ if ! dpkg -s "$pkg" &> /dev/null; then
+ missing_packages+=("$pkg")
+ fi
+ done
+
+ if [ ${#missing_packages[@]} -gt 0 ]; then
+ log_message "Installation des paquets LDAP manquants : ${missing_packages[*]}"
+ apt-get update
+apt-get install -y "${missing_packages[@]}"
+ 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"
- # Afficher le message sur la console
- if [[ "$level" == "ERROR" ]]; then
- echo -e "${RED}[ERROR] $message${NC}"
- elif [[ "$level" == "WARNING" ]]; then
- echo -e "${YELLOW}[WARNING] $message${NC}"
+ 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
- echo -e "${GREEN}[INFO] $message${NC}"
+ 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
-
- # Enregistrer dans le fichier journal
- echo "[$(date +"%Y-%m-%d %H:%M:%S")] [$level] $message" >> "$LOG_FILE"
-}
-# Fonction d'envoi d'email
-send_email() {
- local subject="$1"
- local body="$2"
-
- echo "$body" | mail -s "$subject" "$MAIL_TO"
-
- if [ $? -eq 0 ]; then
- log_message "Email envoyé à $MAIL_TO" "INFO"
+ # 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
- log_message "Échec de l'envoi d'email à $MAIL_TO" "ERROR"
+ db_checks+=("| Réplication AD | Fonctionnelle |
")
fi
+
+ # Nettoyage
+ rm -f "$temp_file"
+
+ echo "${db_checks[@]}"
}
-# Fonction pour vérifier et monter le partage réseau
-check_mount() {
- # Vérifier si le point de montage existe
- if [ ! -d "$BACKUP_MOUNT" ]; then
- mkdir -p "$BACKUP_MOUNT"
- log_message "Création du point de montage $BACKUP_MOUNT" "INFO"
- fi
+# Vérification des processus Samba
+check_samba_processes() {
+ local processes_to_check=(
+ "samba"
+ "winbind_server"
+ "ldap_server"
+ "dns"
+ "kdc_server"
+ "dreplsrv"
+ "rpc_server"
+ "cldap_server"
+ "nbt_server"
+ )
+ local process_status=()
+
+ log_message "Début de la vérification des processus Samba"
- # Vérifier si le partage est déjà monté
- if mountpoint -q "$BACKUP_MOUNT"; then
- log_message "Le partage est déjà monté sur $BACKUP_MOUNT" "INFO"
- return 0
- fi
+ local samba_processes=$(samba-tool processes | tail -n +3 | awk '{print $1}' | sort | uniq)
+
+ for proc in "${processes_to_check[@]}"; do
+ if echo "$samba_processes" | grep -q "$proc"; then
+ process_status+=("| $proc | Actif |
")
+ else
+ process_status+=("| $proc | Inactif |
")
+ fi
+ done
+
+ echo "${process_status[@]}"
+}
+
+check_syncthing_processes() {
+ local processes_to_check=(
+ "syncthing"
+ )
+ local process_status=()
+ #log_message "Début de la vérification des processus Syncthing"
- # Tenter de monter le partage
- mount -t cifs "$BACKUP_SHARE" "$BACKUP_MOUNT" -o username="$BACKUP_USER",password="$BACKUP_PASSWORD",vers=3.0
+ # Correction: utilisation de ps ou pgrep pour vérifier les processus
+ local syncthing_processes=$(ps aux | awk '{print $11}' | sort | uniq)
+ for proc in "${processes_to_check[@]}"; do
+ if echo "$syncthing_processes" | grep -q "$proc"; then
+ process_status+=("| $proc | Actif |
")
+ else
+ process_status+=("| $proc | Inactif |
")
+ fi
+ done
+ echo "${process_status[@]}"
+}
+
+check_tis_services() {
+ local services_to_check=(
+ "tis-sysvolsync"
+ "tis-sysvolacl"
+ )
+ local service_status=()
+ #log_message "Début de la vérification des services TIS"
- if [ $? -eq 0 ]; then
- log_message "Partage $BACKUP_SHARE monté avec succès sur $BACKUP_MOUNT" "INFO"
- return 0
+ for service in "${services_to_check[@]}"; do
+ # Vérifier si le service est activé (enabled au démarrage)
+ if systemctl is-enabled "$service" &>/dev/null; then
+ local enabled_status="Activé au démarrage"
+ local enabled_color="$COLOR_GREEN"
+ else
+ local enabled_status="Non activé au démarrage"
+ local enabled_color="$COLOR_RED"
+ fi
+
+ # Vérifier si le service est démarré (running)
+ if systemctl is-active "$service" &>/dev/null; then
+ local active_status="Démarré"
+ local active_color="$COLOR_GREEN"
+ else
+ local active_status="Arrêté"
+ local active_color="$COLOR_RED"
+ fi
+
+ service_status+=("| $service | $enabled_status | $active_status |
")
+ done
+
+ echo "${service_status[@]}"
+}
+
+# Vérification détaillée Kerberos
+check_kerberos() {
+ local kerberos_checks=()
+ local password="Linux741!"
+
+ # Demander interactivement le mot de passe
+ #read -s -p "Mot de passe pour $ADMIN_USER : " password
+ echo
+
+ local kdc_processes=$(samba-tool processes | grep "kdc_server")
+
+ if [ -n "$kdc_processes" ]; then
+ if echo "$password" | kinit "$ADMIN_USER" &> /dev/null; then
+ kerberos_checks+=("| Authentification Kerberos | Actif et Valide |
")
+ else
+ kerberos_checks+=("| Authentification Kerberos | Problème détecté |
")
+ kerberos_checks+=("| Problème avec l'authentification Kerberos pour l'utilisateur '$ADMIN_USER'. |
")
+ fi
else
- log_message "Impossible de monter le partage $BACKUP_SHARE sur $BACKUP_MOUNT" "ERROR"
- send_email "ERREUR: Échec du montage du partage pour la sauvegarde Samba" "Le script de sauvegarde n'a pas pu monter le partage réseau $BACKUP_SHARE sur $BACKUP_MOUNT. Veuillez vérifier la connectivité réseau et les identifiants."
- return 1
+ kerberos_checks+=("| Authentification Kerberos | Problème détecté |
")
+ kerberos_checks+=("| Service KDC inactif. |
")
fi
+
+ echo "${kerberos_checks[@]}"
}
-# Fonction de sauvegarde des GPO
-backup_gpo() {
- log_message "Sauvegarde des GPO..." "INFO"
- GPO_BACKUP_DIR="$BACKUP_DIR/gpo_backup_$DATE"
- mkdir -p "$GPO_BACKUP_DIR"
+# Vérification LDAP
+check_ldap() {
+ local ldap_checks=()
- # Utiliser samba-tool pour sauvegarder les GPO
- samba-tool gpo backup "$GPO_BACKUP_DIR" -U "$ADMIN_USER" || {
- log_message "Erreur lors de la sauvegarde des GPO" "ERROR"
- send_email "ERREUR: Échec de la sauvegarde des GPO Samba" "Le script de sauvegarde n'a pas pu sauvegarder les GPO. Vérifiez les logs pour plus de détails."
- return 1
- }
-
- log_message "Sauvegarde des GPO terminée dans $GPO_BACKUP_DIR" "INFO"
- return 0
-}
-
-# Fonction de nettoyage des anciennes sauvegardes
-cleanup_old_backups() {
- log_message "Nettoyage des anciennes sauvegardes (plus de $RETENTION_DAYS jours)..." "INFO"
- find "$BACKUP_DIR" -name "samba_backup_*" -type f -mtime +$RETENTION_DAYS -delete
- find "$BACKUP_DIR" -name "gpo_backup_*" -type d -mtime +$RETENTION_DAYS -exec rm -rf {} \; 2>/dev/null || true
- log_message "Nettoyage terminé" "INFO"
-}
-
-# Fonction principale de sauvegarde Samba
-backup_samba() {
- log_message "Début de la sauvegarde Samba..." "INFO"
-
- # Vérifier et monter le partage
- check_mount || return 1
-
- # Vérifier que le répertoire de sauvegarde existe
- if [ ! -d "$BACKUP_DIR" ]; then
- mkdir -p "$BACKUP_DIR" || {
- log_message "Impossible de créer le répertoire $BACKUP_DIR" "ERROR"
- send_email "ERREUR: Échec de création du répertoire de sauvegarde Samba" "Le script n'a pas pu créer le répertoire $BACKUP_DIR."
- return 1
- }
- fi
-
- # Mode automatique : génération automatique du nom de sauvegarde
- if [[ "$AUTO_MODE" = true ]]; then
- CUSTOM_NAME="samba_backup_$DATE"
- log_message "Mode automatique activé. Sauvegarde : $CUSTOM_NAME" "INFO"
+ # Vérifier la configuration LDAP via samba-tool
+ if samba-tool domain info $(hostname -f) &> /dev/null; then
+ ldap_checks+=("| Annuaire LDAP | Configuré et Accessible |
")
else
- echo -e "${YELLOW}Entrez un nom pour la sauvegarde (laisser vide pour générer automatiquement) :${NC}"
- read -r CUSTOM_NAME
- if [[ -z "$CUSTOM_NAME" ]]; then
- CUSTOM_NAME="samba_backup_$DATE"
+ ldap_checks+=("| Annuaire LDAP | Problème de configuration |
")
+ ldap_checks+=("| Impossible de récupérer les informations du domaine. |
")
+ fi
+
+ echo "${ldap_checks[@]}"
+}
+
+# Vérification DNS
+check_dns() {
+ local dns_checks=()
+
+ local dns_processes=$(samba-tool processes | grep "dns")
+
+ if [ -n "$dns_processes" ] && host "$DOMAIN_NAME" &> /dev/null; then
+ dns_checks+=("| Serveur DNS | Actif et Fonctionnel |
")
+ else
+ dns_checks+=("| Serveur DNS | Problème détecté |
")
+ 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)" -eq 1 ]; 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
-
- ARCHIVE="$BACKUP_DIR/${CUSTOM_NAME}.tar.gz"
-
- # Nettoyer les anciennes sauvegardes
- cleanup_old_backups
-
- # Sauvegarde des GPO
- backup_gpo || return 1
-
- # Vérifier l'espace disque disponible
- REQUIRED_SPACE=$(du -s "$SAMBA_PRIVATE" "$SAMBA_SYSVOL" "$SAMBA_CONFIG" | awk '{total += $1} END {print total}')
- AVAILABLE_SPACE=$(df -k "$BACKUP_DIR" | tail -1 | awk '{print $4}')
-
- if [ "$AVAILABLE_SPACE" -lt "$REQUIRED_SPACE" ]; then
- log_message "Espace disque insuffisant pour la sauvegarde. Requis: $REQUIRED_SPACE KB, Disponible: $AVAILABLE_SPACE KB" "ERROR"
- send_email "ERREUR: Espace disque insuffisant pour la sauvegarde Samba" "L'espace disque est insuffisant pour effectuer la sauvegarde. Requis: $REQUIRED_SPACE KB, Disponible: $AVAILABLE_SPACE KB"
- return 1
+
+ # 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 < 1.0" | bc -l)" -eq 1 ]; 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
-
- # Création de l'archive
- tar -czf "$ARCHIVE" "$SAMBA_PRIVATE" "$SAMBA_SYSVOL" "$SAMBA_CONFIG" || {
- log_message "Erreur lors de la création de l'archive $ARCHIVE" "ERROR"
- send_email "ERREUR: Échec de la création de l'archive Samba" "Le script n'a pas pu créer l'archive de sauvegarde $ARCHIVE."
- return 1
- }
-
- log_message "Fichiers sauvegardés dans $ARCHIVE" "INFO"
-
- # Sauvegarde des ACL
- ACL_FILE="$BACKUP_DIR/${CUSTOM_NAME}_acl.acl"
- getfacl -R "$SAMBA_SYSVOL" > "$ACL_FILE" || {
- log_message "Erreur lors de la sauvegarde des ACL dans $ACL_FILE" "WARNING"
- # On continue malgré cette erreur, car ce n'est pas critique
- }
-
- log_message "ACL sauvegardées dans $ACL_FILE" "INFO"
-
- # Vérifier la taille de l'archive créée
- if [ -f "$ARCHIVE" ]; then
- ARCHIVE_SIZE=$(du -h "$ARCHIVE" | cut -f1)
- log_message "Sauvegarde terminée. Taille de l'archive: $ARCHIVE_SIZE" "INFO"
- send_email "Sauvegarde Samba réussie" "La sauvegarde Samba a été effectuée avec succès.\nArchive: $ARCHIVE\nTaille: $ARCHIVE_SIZE"
- else
- log_message "L'archive $ARCHIVE n'existe pas après la sauvegarde" "ERROR"
- send_email "ERREUR: Échec de la sauvegarde Samba" "L'archive de sauvegarde $ARCHIVE n'a pas été créée correctement."
- return 1
- fi
-
- return 0
+
+ echo "${time_checks[@]}"
}
-# Fonction de restauration
-restore_samba() {
- log_message "Début de la restauration Samba..." "INFO"
+# Vérification des ports UFW
+check_ufw_ports() {
+ local ufw_checks=()
- # Vérifier et monter le partage
- check_mount || return 1
-
- if [[ ! -d "$BACKUP_DIR" ]] || [[ -z $(ls -A "$BACKUP_DIR" | grep "tar.gz") ]]; then
- log_message "Aucune sauvegarde trouvée dans $BACKUP_DIR" "ERROR"
- return 1
+ # Vérifier si UFW est installé
+ if ! command -v ufw &> /dev/null; then
+ ufw_checks+=("| UFW | Non installé |
")
+ return
fi
-
- echo -e "${YELLOW}Liste des sauvegardes disponibles :${NC}"
- ls -1 "$BACKUP_DIR" | grep "tar.gz" | nl
-
- echo -e "${YELLOW}Choisissez le numéro de la sauvegarde à restaurer :${NC}"
- read -r BACKUP_CHOICE
- BACKUP_FILE=$(ls -1 "$BACKUP_DIR" | grep "tar.gz" | sed -n "${BACKUP_CHOICE}p")
-
- if [[ -z "$BACKUP_FILE" ]]; then
- log_message "Sélection invalide" "ERROR"
- return 1
+
+ # Vérifier si UFW est actif
+ if ! ufw status | grep -q "Status: active"; then
+ ufw_checks+=("| UFW Status | Inactif |
")
+ return
fi
-
- BACKUP_PATH="$BACKUP_DIR/$BACKUP_FILE"
- log_message "Sauvegarde sélectionnée : $BACKUP_FILE" "INFO"
-
- echo -e "${YELLOW}Arrêt du service Samba...${NC}"
- systemctl stop samba-ad-dc || {
- log_message "Erreur lors de l'arrêt du service samba-ad-dc" "ERROR"
- return 1
- }
-
- # Sauvegarde des fichiers actuels avant restauration
- BACKUP_ORIG_DIR="$BACKUP_DIR/original_$DATE"
- mkdir -p "$BACKUP_ORIG_DIR"
- log_message "Sauvegarde des fichiers originaux dans $BACKUP_ORIG_DIR" "INFO"
-
- tar -czf "$BACKUP_ORIG_DIR/original_samba_files.tar.gz" "$SAMBA_PRIVATE" "$SAMBA_SYSVOL" "$SAMBA_CONFIG" || {
- log_message "Erreur lors de la sauvegarde des fichiers originaux" "WARNING"
- echo -e "${YELLOW}Voulez-vous continuer la restauration quand même ? (o/n) :${NC}"
- read -r CONTINUE_RESTORE
- if [[ "$CONTINUE_RESTORE" != "o" ]]; then
- systemctl start samba-ad-dc
- log_message "Restauration annulée par l'utilisateur" "INFO"
- return 1
+
+ # 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
- }
-
- # Extraction de l'archive
- tar -xzf "$BACKUP_PATH" -C / || {
- log_message "Erreur lors de l'extraction de l'archive $BACKUP_PATH" "ERROR"
- echo -e "${RED}La restauration a échoué. Voulez-vous restaurer les fichiers originaux ? (o/n) :${NC}"
- read -r RESTORE_ORIG
- if [[ "$RESTORE_ORIG" == "o" ]]; then
- tar -xzf "$BACKUP_ORIG_DIR/original_samba_files.tar.gz" -C /
- log_message "Fichiers originaux restaurés" "INFO"
- fi
- systemctl start samba-ad-dc
- return 1
- }
-
- # Restauration des ACL
- ACL_FILE="$BACKUP_DIR/${BACKUP_FILE%.tar.gz}_acl.acl"
- if [[ -f "$ACL_FILE" ]]; then
- setfacl --restore="$ACL_FILE"
- log_message "ACL restaurées depuis $ACL_FILE" "INFO"
- else
- log_message "Fichier ACL introuvable. Les permissions SYSVOL doivent être réinitialisées." "WARNING"
- fi
-
- echo -e "${YELLOW}Réinitialisation des permissions SYSVOL...${NC}"
- samba-tool ntacl sysvolreset || log_message "Erreur lors de la réinitialisation des permissions SYSVOL" "WARNING"
-
- echo -e "${YELLOW}Redémarrage du service Samba...${NC}"
- systemctl start samba-ad-dc || {
- log_message "Erreur lors du redémarrage du service samba-ad-dc" "ERROR"
- send_email "ERREUR: Échec du redémarrage de Samba après restauration" "Le service samba-ad-dc n'a pas pu être redémarré après la restauration. Une intervention manuelle est requise."
- return 1
- }
-
- log_message "Restauration Samba terminée avec succès" "INFO"
- send_email "Restauration Samba réussie" "La restauration de Samba a été effectuée avec succès à partir de $BACKUP_PATH."
- return 0
+ done
+
+ echo "${ufw_checks[@]}"
}
-# Vérification des privilèges root
-if [[ $EUID -ne 0 ]]; then
- log_message "Ce script doit être exécuté en tant que root" "ERROR"
- exit 1
-fi
+# Génération du rapport HTML
+generate_html_report() {
+ cat << EOF > "$REPORT_FILE"
+
+
+
+ Rapport Monitoring Samba AD DC - $SERVER_NAME
+
+
+
+ Rapport de Monitoring Samba AD DC - $SERVER_NAME - $(date '+%d/%m/%Y %H:%M:%S')
-# Parsing des arguments
-while [[ $# -gt 0 ]]; do
- case "$1" in
- --auto)
- AUTO_MODE=true
- shift
- ;;
- --retention=*)
- RETENTION_DAYS="${1#*=}"
- shift
- ;;
- *)
- log_message "Option non reconnue: $1" "ERROR"
- exit 1
- ;;
- esac
-done
+ Processus Samba AD
+
+ $(check_samba_processes)
+
+
+ Processus Syncthing Sysvol
+
+ $(check_syncthing_processes)
+
+
+ Processus tis-sysvol services
+
+ $(check_tis_services)
+
+
+ Authentification Kerberos
+
-# Menu principal modifié pour supporter le mode auto
-if [[ "$AUTO_MODE" = true ]]; then
- backup_samba
- exit_code=$?
- exit $exit_code
-else
- echo -e "${YELLOW}Samba Backup & Restore Script${NC}"
- echo -e "${GREEN}1. Sauvegarder Samba${NC}"
- echo -e "${GREEN}2. Restaurer Samba${NC}"
- echo -e "${GREEN}3. Quitter${NC}"
- echo -e "Choisissez une option :"
- read -r OPTION
+ Annuaire LDAP
+
- case $OPTION in
- 1)
- backup_samba
- ;;
- 2)
- restore_samba
- ;;
- 3)
- echo -e "${GREEN}Quitter...${NC}"
- exit 0
- ;;
- *)
- log_message "Option invalide" "ERROR"
- exit 1
- ;;
- esac
-fi
+ Serveur DNS
+
+
+ Synchronisation de l'heure
+
+
+ État des ports UFW
+
+
+ État de la Base de Données AD
+
+ $(check_database_consistency)
+
+
+
+EOF
+}
+
+# Envoi du rapport par email
+send_email_report() {
+ if [ -f "$REPORT_FILE" ]; then
+ if command -v sendmail &> /dev/null; then
+ (
+ echo "To: $ADMIN_EMAIL"
+ echo "Subject: Rapport Monitoring Samba AD DC - $SERVER_NAME - $(date '+%d/%m/%Y')"
+ echo "Content-Type: text/html"
+ echo ""
+ cat "$REPORT_FILE"
+ ) | sendmail -t
+ log_message "Rapport envoyé via sendmail à $ADMIN_EMAIL"
+ elif command -v ssmtp &> /dev/null; then
+ (
+ echo "To: $ADMIN_EMAIL"
+ 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
+ log_message "Aucun outil d'envoi d'email (sendmail/ssmtp) trouvé. Le rapport n'a pas été envoyé."
+ fi
+ else
+ log_message "Le fichier de rapport $REPORT_FILE n'existe pas. Impossible d'envoyer l'email."
+ fi
+}
+
+# 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"