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 ADCohérente") + else + db_checks+=("Base de données ADProblèmes détectés") + + # Extraction et formatage des erreurs + local db_errors=$(cat "$temp_file" | 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ésNettoyage 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 ADErreurs de réplication détectées") + else + db_checks+=("Réplication ADFonctionnelle") + 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 KerberosActif et Valide") else kerberos_checks+=("Authentification KerberosProblè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 KerberosProblè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 LDAPConfiguré et Accessible") else ldap_checks+=("Annuaire LDAPProblè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 DNSActif et Fonctionnel") else dns_checks+=("Serveur DNSProblè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 NTPNon 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+=("UFWNon installé") + return + fi + + # Vérifier si UFW est actif + if ! ufw status | grep -q "Status: active"; then + ufw_checks+=("UFW StatusInactif") + 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 $portOuvert") + else + ufw_checks+=("Port $portFermé") + 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

+ + $(check_time_sync) +
+ +

État des ports UFW

+ + $(check_ufw_ports) +
+ +

É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

$(check_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"