#!/bin/bash
# Script de monitoring pour Serveur Samba Active Directory
# 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"
DOMAIN_NAME=$(hostname -d)
REALM=$(samba-tool domain info $(hostname -f) | grep "Realm" | cut -d: -f2 | tr -d '[:space:]')
ADMIN_USER="Administrator"
# 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 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+=("
| $proc | Actif |
")
else
process_status+=("| $proc | Inactif |
")
fi
done
echo "${process_status[@]}"
}
# 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
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+=("| 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. |
")
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é. |
")
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+=("| 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. |
")
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+=("| 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. |
")
fi
echo "${dns_checks[@]}"
}
# Génération du rapport HTML
generate_html_report() {
cat << EOF > "$REPORT_FILE"
Rapport Monitoring Samba AD DC
Rapport de Monitoring Samba AD DC - $(date '+%d/%m/%Y %H:%M:%S')
Processus Samba AD
Authentification Kerberos
Serveur LDAP
Serveur DNS
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 - $(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 - $(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"
fi
else
log_message "Erreur: Fichier de rapport introuvable"
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