Update and rename samba_backup_restore.sh to samba_ad_backup.sh
This commit is contained in:
parent
24730b92b1
commit
1cdf38cc3a
|
|
@ -0,0 +1,509 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
#----------------------------------------------------------------
|
||||||
|
### Attention MSMTPRC doit être configuré sur le poste client ###
|
||||||
|
#----------------------------------------------------------------
|
||||||
|
|
||||||
|
# Variables
|
||||||
|
SAMBA_PRIVATE="/var/lib/samba/private"
|
||||||
|
SAMBA_SYSVOL="/var/lib/samba/sysvol"
|
||||||
|
SAMBA_CONFIG="/etc/samba"
|
||||||
|
BACKUP_DIR="/mnt/Backups/srv-AD/sauvegardes/samba"
|
||||||
|
BACKUP_MOUNT="/mnt/Backups"
|
||||||
|
BACKUP_SHARE="//nashitema/Backups"
|
||||||
|
BACKUP_USER="backup"
|
||||||
|
BACKUP_PASSWORD="**********"
|
||||||
|
DATE=$(date +%Y%m%d_%H%M%S)
|
||||||
|
GREEN="\033[1;32m"
|
||||||
|
RED="\033[1;31m"
|
||||||
|
YELLOW="\033[1;33m"
|
||||||
|
NC="\033[0m"
|
||||||
|
ADMIN_CREDS_FILE="/root/.creds/smb_bcks"
|
||||||
|
LOG_FILE="/var/log/samba_backup.log"
|
||||||
|
MAIL_TO="admin@domain.fr"
|
||||||
|
|
||||||
|
# Mode automatique (défaut à false)
|
||||||
|
AUTO_MODE=false
|
||||||
|
RETENTION_DAYS=30
|
||||||
|
DRY_RUN=false
|
||||||
|
|
||||||
|
# Fonction de journalisation
|
||||||
|
log_message() {
|
||||||
|
local message="$1"
|
||||||
|
local level="$2"
|
||||||
|
|
||||||
|
if [[ "$level" == "ERROR" ]]; then
|
||||||
|
echo -e "${RED}[ERROR] $message${NC}"
|
||||||
|
elif [[ "$level" == "WARNING" ]]; then
|
||||||
|
echo -e "${YELLOW}[WARNING] $message${NC}"
|
||||||
|
else
|
||||||
|
echo -e "${GREEN}[INFO] $message${NC}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "[$(date +"%Y-%m-%d %H:%M:%S")] [$level] $message" >> "$LOG_FILE"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Fonction pour gérer les identifiants administrateur
|
||||||
|
setup_admin_credentials() {
|
||||||
|
if [ ! -f "$ADMIN_CREDS_FILE" ]; then
|
||||||
|
mkdir -p "$(dirname "$ADMIN_CREDS_FILE")"
|
||||||
|
|
||||||
|
if [ -z "$ADMIN_PASSWORD" ]; then
|
||||||
|
echo -e "${YELLOW}Entrez le mot de passe Administrateur pour Samba AD :${NC}"
|
||||||
|
read -s ADMIN_PASSWORD
|
||||||
|
echo
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "username = Administrator" > "$ADMIN_CREDS_FILE"
|
||||||
|
echo "password = $ADMIN_PASSWORD" >> "$ADMIN_CREDS_FILE"
|
||||||
|
|
||||||
|
chmod 600 "$ADMIN_CREDS_FILE"
|
||||||
|
log_message "Fichier d'identifiants créé: $ADMIN_CREDS_FILE" "INFO"
|
||||||
|
fi
|
||||||
|
|
||||||
|
ADMIN_USER=$(grep -oP '(?<=username = ).+' "$ADMIN_CREDS_FILE")
|
||||||
|
ADMIN_PASSWORD=$(grep -oP '(?<=password = ).+' "$ADMIN_CREDS_FILE")
|
||||||
|
|
||||||
|
if [ -z "$ADMIN_USER" ] || [ -z "$ADMIN_PASSWORD" ]; then
|
||||||
|
log_message "Impossible de lire les identifiants depuis $ADMIN_CREDS_FILE" "ERROR"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# Fonction d'envoi d'email avec msmtp
|
||||||
|
send_email() {
|
||||||
|
local subject="$1"
|
||||||
|
local body="$2"
|
||||||
|
local status="${3:-info}"
|
||||||
|
|
||||||
|
TEMP_EMAIL=$(mktemp)
|
||||||
|
|
||||||
|
local message_class="info"
|
||||||
|
local bg_color="#4a86e8"
|
||||||
|
|
||||||
|
if [[ "$status" == "ERROR" ]]; then
|
||||||
|
message_class="error"
|
||||||
|
bg_color="#cc0000"
|
||||||
|
elif [[ "$status" == "SUCCESS" ]]; then
|
||||||
|
message_class="success"
|
||||||
|
bg_color="#007700"
|
||||||
|
fi
|
||||||
|
|
||||||
|
body=$(echo -e "$body" | sed 's/$/\<br\>/g')
|
||||||
|
|
||||||
|
cat > "$TEMP_EMAIL" << EOF
|
||||||
|
From: Système de sauvegarde Samba <backups@domain.fr>
|
||||||
|
To: $MAIL_TO
|
||||||
|
Subject: $subject
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/html; charset=UTF-8
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
body { font-family: Arial, sans-serif; margin: 0; padding: 0; background-color: #f5f5f5; }
|
||||||
|
.container { max-width: 600px; margin: 0 auto; border: 1px solid #ddd; border-radius: 5px; overflow: hidden; }
|
||||||
|
.header { background-color: ${bg_color}; color: white; padding: 15px; text-align: center; }
|
||||||
|
.content { padding: 20px; background-color: white; }
|
||||||
|
.footer { background-color: #eee; padding: 10px; text-align: center; font-size: 12px; color: #666; }
|
||||||
|
.error { color: #cc0000; font-weight: bold; }
|
||||||
|
.success { color: #007700; font-weight: bold; }
|
||||||
|
.info { color: #0066cc; }
|
||||||
|
table { width: 100%; border-collapse: collapse; margin-top: 10px; }
|
||||||
|
table, th, td { border: 1px solid #ddd; }
|
||||||
|
th, td { padding: 8px; text-align: left; }
|
||||||
|
th { background-color: #f2f2f2; }
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="container">
|
||||||
|
<div class="header">
|
||||||
|
<h2>Notification de sauvegarde Samba</h2>
|
||||||
|
</div>
|
||||||
|
<div class="content">
|
||||||
|
<div class="${message_class}">
|
||||||
|
${body}
|
||||||
|
</div>
|
||||||
|
<div style="margin-top: 20px;">
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>Serveur</th>
|
||||||
|
<td>$(hostname)</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Date</th>
|
||||||
|
<td>$(date)</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Script</th>
|
||||||
|
<td>samba_ad_backup.sh</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer">
|
||||||
|
Ce message est généré automatiquement, merci de ne pas y répondre.
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
EOF
|
||||||
|
|
||||||
|
msmtp -a Backups -t < "$TEMP_EMAIL"
|
||||||
|
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
log_message "Email envoyé à $MAIL_TO" "INFO"
|
||||||
|
else
|
||||||
|
log_message "Échec de l'envoi d'email à $MAIL_TO" "ERROR"
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -f "$TEMP_EMAIL"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Fonction de test d'envoi d'email
|
||||||
|
test_send_email() {
|
||||||
|
log_message "Test d'envoi d'email..." "INFO"
|
||||||
|
send_email "Test d'envoi d'email" "Ceci est un email de test envoyé par le script de sauvegarde Samba." "info"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Fonction pour vérifier et monter le partage réseau
|
||||||
|
check_mount() {
|
||||||
|
if [ ! -d "$BACKUP_MOUNT" ]; then
|
||||||
|
mkdir -p "$BACKUP_MOUNT"
|
||||||
|
log_message "Création du point de montage $BACKUP_MOUNT" "INFO"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if mountpoint -q "$BACKUP_MOUNT"; then
|
||||||
|
log_message "Le partage est déjà monté sur $BACKUP_MOUNT" "INFO"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
mount -t cifs "$BACKUP_SHARE" "$BACKUP_MOUNT" -o username="$BACKUP_USER",password="$BACKUP_PASSWORD",vers=3.0
|
||||||
|
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
log_message "Partage $BACKUP_SHARE monté avec succès sur $BACKUP_MOUNT" "INFO"
|
||||||
|
return 0
|
||||||
|
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." "ERROR"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Fonction de sauvegarde des GPO
|
||||||
|
backup_gpo() {
|
||||||
|
local custom_name="$1"
|
||||||
|
local gpo_dir=""
|
||||||
|
|
||||||
|
if [[ -z "$custom_name" ]]; then
|
||||||
|
gpo_dir="$BACKUP_DIR/gpo_backup_$DATE"
|
||||||
|
else
|
||||||
|
gpo_dir="$BACKUP_DIR/gpo_backup_${custom_name}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
log_message "Sauvegarde des GPO dans $gpo_dir..." "INFO"
|
||||||
|
mkdir -p "$gpo_dir"
|
||||||
|
|
||||||
|
gpo_list=$(samba-tool gpo listall 2>/dev/null)
|
||||||
|
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
log_message "Erreur lors de la récupération de la liste des GPO" "ERROR"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
while IFS= read -r line; do
|
||||||
|
gpo_guid=$(echo "$line" | grep -o -P '\{[0-9A-Fa-f\-]+\}')
|
||||||
|
if [[ -n "$gpo_guid" ]]; then
|
||||||
|
if [[ "$DRY_RUN" = true ]]; then
|
||||||
|
log_message "DRY RUN: Simulation de sauvegarde du GPO $gpo_guid dans $gpo_dir" "INFO"
|
||||||
|
else
|
||||||
|
samba-tool gpo backup "$gpo_guid" -H "$gpo_dir/$gpo_guid" -U "${ADMIN_USER}%${ADMIN_PASSWORD}" 2>/dev/null
|
||||||
|
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
log_message "Erreur lors de la sauvegarde du GPO $gpo_guid" "ERROR"
|
||||||
|
send_email "ERREUR: Échec de la sauvegarde du GPO $gpo_guid" "Le script n'a pas pu sauvegarder le GPO $gpo_guid. Vérifiez les logs pour plus de détails." "ERROR"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done <<< "$gpo_list"
|
||||||
|
|
||||||
|
log_message "Sauvegarde des GPO terminée dans $gpo_dir" "INFO"
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# Fonction de nettoyage des anciennes sauvegardes
|
||||||
|
cleanup_old_backups() {
|
||||||
|
if [[ "$DRY_RUN" = true ]]; then
|
||||||
|
log_message "DRY RUN: Simulation de nettoyage des anciennes sauvegardes (plus de $RETENTION_DAYS jours)" "INFO"
|
||||||
|
find "$BACKUP_DIR" -name "*.tar.gz" -type f -mtime +$RETENTION_DAYS -print
|
||||||
|
find "$BACKUP_DIR" -name "gpo_backup_*" -type d -mtime +$RETENTION_DAYS -print
|
||||||
|
else
|
||||||
|
log_message "Nettoyage des anciennes sauvegardes (plus de $RETENTION_DAYS jours)..." "INFO"
|
||||||
|
find "$BACKUP_DIR" -name "*.tar.gz" -type f -mtime +$RETENTION_DAYS -delete
|
||||||
|
find "$BACKUP_DIR" -name "gpo_backup_*" -type d -mtime +$RETENTION_DAYS -exec rm -rf {} \; 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
log_message "Nettoyage terminé" "INFO"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Fonction principale de sauvegarde Samba
|
||||||
|
backup_samba() {
|
||||||
|
log_message "Début de la sauvegarde Samba..." "INFO"
|
||||||
|
|
||||||
|
setup_admin_credentials || return 1
|
||||||
|
check_mount || return 1
|
||||||
|
|
||||||
|
if [ ! -d "$BACKUP_DIR" ]; then
|
||||||
|
if [[ "$DRY_RUN" = true ]]; then
|
||||||
|
log_message "DRY RUN: Création du répertoire $BACKUP_DIR" "INFO"
|
||||||
|
else
|
||||||
|
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." "ERROR"
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$AUTO_MODE" = true ]]; then
|
||||||
|
CUSTOM_NAME="samba_backup_$DATE"
|
||||||
|
log_message "Mode automatique activé. Sauvegarde : $CUSTOM_NAME" "INFO"
|
||||||
|
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"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
ARCHIVE="$BACKUP_DIR/${CUSTOM_NAME}.tar.gz"
|
||||||
|
|
||||||
|
cleanup_old_backups
|
||||||
|
|
||||||
|
backup_gpo "$CUSTOM_NAME" || return 1
|
||||||
|
|
||||||
|
REQUIRED_SPACE=$(du -sb "$SAMBA_PRIVATE" "$SAMBA_SYSVOL" "$SAMBA_CONFIG" | awk '{total += $1} END {print total}')
|
||||||
|
AVAILABLE_SPACE=$(df -B1 "$BACKUP_DIR" | tail -1 | awk '{print $4}')
|
||||||
|
|
||||||
|
if [ "$AVAILABLE_SPACE" -lt "$REQUIRED_SPACE" ]; then
|
||||||
|
log_message "Espace disque insuffisant pour la sauvegarde. Requis: $(numfmt --to=iec-i --suffix=B $REQUIRED_SPACE), Disponible: $(numfmt --to=iec-i --suffix=B $AVAILABLE_SPACE)" "ERROR"
|
||||||
|
send_email "ERREUR: Espace disque insuffisant pour la sauvegarde Samba" "L'espace disque est insuffisant pour effectuer la sauvegarde.\n\nRequis: $(numfmt --to=iec-i --suffix=B $REQUIRED_SPACE)\nDisponible: $(numfmt --to=iec-i --suffix=B $AVAILABLE_SPACE)" "ERROR"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$DRY_RUN" = true ]]; then
|
||||||
|
log_message "DRY RUN: Création de l'archive $ARCHIVE" "INFO"
|
||||||
|
log_message "DRY RUN: Sauvegarde des ACL dans $BACKUP_DIR/${CUSTOM_NAME}_acl.acl" "INFO"
|
||||||
|
else
|
||||||
|
tar --exclude="*/ldap_priv/ldapi" --exclude="*/ldapi" -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." "ERROR"
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
log_message "Fichiers sauvegardés dans $ARCHIVE" "INFO"
|
||||||
|
|
||||||
|
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"
|
||||||
|
}
|
||||||
|
|
||||||
|
log_message "ACL sauvegardées dans $ACL_FILE" "INFO"
|
||||||
|
|
||||||
|
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.\n\nArchive: $ARCHIVE\nTaille: $ARCHIVE_SIZE" "SUCCESS"
|
||||||
|
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." "ERROR"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# Fonction de restauration
|
||||||
|
restore_samba() {
|
||||||
|
log_message "Début de la restauration Samba..." "INFO"
|
||||||
|
|
||||||
|
setup_admin_credentials || return 1
|
||||||
|
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
|
||||||
|
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
|
||||||
|
fi
|
||||||
|
|
||||||
|
BACKUP_PATH="$BACKUP_DIR/$BACKUP_FILE"
|
||||||
|
log_message "Sauvegarde sélectionnée : $BACKUP_FILE" "INFO"
|
||||||
|
|
||||||
|
if [[ "$DRY_RUN" = true ]]; then
|
||||||
|
log_message "DRY RUN: Simulation de restauration de $BACKUP_PATH" "INFO"
|
||||||
|
echo -e "${GREEN}En mode DRY RUN, les étapes suivantes seraient exécutées :${NC}"
|
||||||
|
echo "1. Arrêt du service samba-ad-dc"
|
||||||
|
echo "2. Sauvegarde des fichiers actuels dans $BACKUP_DIR/original_$DATE/"
|
||||||
|
echo "3. Extraction de l'archive $BACKUP_PATH"
|
||||||
|
echo "4. Restauration des ACL si disponibles"
|
||||||
|
echo "5. Réinitialisation des permissions SYSVOL"
|
||||||
|
echo "6. Redémarrage du service samba-ad-dc"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
|
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
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
|
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." "ERROR"
|
||||||
|
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." "SUCCESS"
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# Fonction d'affichage de l'aide
|
||||||
|
show_help() {
|
||||||
|
echo -e "${GREEN}Usage: $0 [options]${NC}"
|
||||||
|
echo
|
||||||
|
echo "Options:"
|
||||||
|
echo " --auto Mode automatique (sans interaction)"
|
||||||
|
echo " --retention=JOURS Définir la durée de rétention (défaut: 30 jours)"
|
||||||
|
echo " --dry-run Simuler les opérations sans les exécuter"
|
||||||
|
echo " --test-email Tester l'envoi d'email"
|
||||||
|
echo " --help Afficher cette aide"
|
||||||
|
echo
|
||||||
|
echo "Exemples:"
|
||||||
|
echo " $0 Exécution interactive"
|
||||||
|
echo " $0 --auto Exécution automatique de la sauvegarde"
|
||||||
|
echo " $0 --dry-run Simulation de sauvegarde"
|
||||||
|
echo " $0 --retention=60 Conserver les sauvegardes pendant 60 jours"
|
||||||
|
echo " $0 --test-email Tester l'envoi d'email"
|
||||||
|
}
|
||||||
|
|
||||||
|
if [[ $EUID -ne 0 ]]; then
|
||||||
|
log_message "Ce script doit être exécuté en tant que root" "ERROR"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Traitement des arguments
|
||||||
|
while [[ $# -gt 0 ]]; do
|
||||||
|
case "$1" in
|
||||||
|
--auto)
|
||||||
|
AUTO_MODE=true
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--retention=*)
|
||||||
|
RETENTION_DAYS="${1#*=}"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--dry-run)
|
||||||
|
DRY_RUN=true
|
||||||
|
log_message "Mode DRY RUN activé - aucune modification ne sera effectuée" "INFO"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--test-email)
|
||||||
|
test_send_email
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
--help)
|
||||||
|
show_help
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
log_message "Option non reconnue: $1" "ERROR"
|
||||||
|
show_help
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
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}5. Quitter${NC}"
|
||||||
|
echo -e "Choisissez une option :"
|
||||||
|
read -r OPTION
|
||||||
|
|
||||||
|
case $OPTION in
|
||||||
|
1)
|
||||||
|
backup_samba
|
||||||
|
;;
|
||||||
|
2)
|
||||||
|
restore_samba
|
||||||
|
;;
|
||||||
|
5)
|
||||||
|
echo -e "${GREEN}Quitter...${NC}"
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
log_message "Option invalide" "ERROR"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
@ -1,416 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Variables
|
|
||||||
SAMBA_PRIVATE="/var/lib/samba/private"
|
|
||||||
SAMBA_SYSVOL="/var/lib/samba/sysvol"
|
|
||||||
SAMBA_CONFIG="/etc/samba"
|
|
||||||
BACKUP_DIR="/mnt/Backups/srv-mtp-addc01/sauvegardes/samba"
|
|
||||||
BACKUP_MOUNT="/mnt/Backups"
|
|
||||||
BACKUP_SHARE="//192.168.1.100/Backups" # Remplacez par votre partage réseau
|
|
||||||
BACKUP_USER="backup_user" # Remplacez par votre utilisateur de sauvegarde
|
|
||||||
BACKUP_PASSWORD="backup_password" # Remplacez par votre mot de passe
|
|
||||||
DATE=$(date +%Y%m%d_%H%M%S)
|
|
||||||
GREEN="\033[1;32m"
|
|
||||||
RED="\033[1;31m"
|
|
||||||
YELLOW="\033[1;33m"
|
|
||||||
NC="\033[0m"
|
|
||||||
ADMIN_USER="Administrator"
|
|
||||||
DOMAIN="h3adm.lan"
|
|
||||||
LOG_FILE="/var/log/samba_backup.log"
|
|
||||||
MAIL_TO="admin@h3campus.fr" # Adresse email pour les notifications
|
|
||||||
|
|
||||||
|
|
||||||
# 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() {
|
|
||||||
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"
|
|
||||||
|
|
||||||
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=(
|
|
||||||
"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"
|
|
||||||
|
|
||||||
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+=("<tr style='background-color: $COLOR_GREEN;'><td>$proc</td><td>Actif</td></tr>")
|
|
||||||
else
|
|
||||||
process_status+=("<tr style='background-color: $COLOR_RED;'><td>$proc</td><td>Inactif</td></tr>")
|
|
||||||
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"
|
|
||||||
|
|
||||||
# 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+=("<tr style='background-color: $COLOR_GREEN;'><td>$proc</td><td>Actif</td></tr>")
|
|
||||||
else
|
|
||||||
process_status+=("<tr style='background-color: $COLOR_RED;'><td>$proc</td><td>Inactif</td></tr>")
|
|
||||||
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"
|
|
||||||
|
|
||||||
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+=("<tr><td style='background-color: $enabled_color;'>$service</td><td style='background-color: $enabled_color;'>$enabled_status</td><td style='background-color: $active_color;'>$active_status</td></tr>")
|
|
||||||
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+=("<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'>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'>Service KDC inactif.</td></tr>")
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "${kerberos_checks[@]}"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Vérification LDAP
|
|
||||||
check_ldap() {
|
|
||||||
local ldap_checks=()
|
|
||||||
|
|
||||||
# Vérifier la configuration LDAP via samba-tool
|
|
||||||
if samba-tool domain info $(hostname -f) &> /dev/null; then
|
|
||||||
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.</td></tr>")
|
|
||||||
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+=("<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'>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)" -eq 1 ]; 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 < 1.0" | bc -l)" -eq 1 ]; 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 - $SERVER_NAME</title>
|
|
||||||
<style>
|
|
||||||
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; margin-top: 20px; }
|
|
||||||
pre { white-space: pre-wrap; word-wrap: break-word; }
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<h1>Rapport de Monitoring Samba AD DC - $SERVER_NAME - $(date '+%d/%m/%Y %H:%M:%S')</h1>
|
|
||||||
|
|
||||||
<h2>Processus Samba AD</h2>
|
|
||||||
<table>
|
|
||||||
$(check_samba_processes)
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<h2>Processus Syncthing Sysvol</h2>
|
|
||||||
<table>
|
|
||||||
$(check_syncthing_processes)
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<h2>Processus tis-sysvol services</h2>
|
|
||||||
<table>
|
|
||||||
$(check_tis_services)
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<h2>Authentification Kerberos</h2>
|
|
||||||
<table>
|
|
||||||
$(check_kerberos)
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<h2>Annuaire LDAP</h2>
|
|
||||||
<table>
|
|
||||||
$(check_ldap)
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<h2>Serveur DNS</h2>
|
|
||||||
<table>
|
|
||||||
$(check_dns)
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<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>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
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"
|
|
||||||
Loading…
Reference in New Issue