#!/bin/bash # --- 0. VÉRIFICATION DES DROITS --- if [ "$EUID" -ne 0 ]; then echo "❌ Erreur : Ce script doit être lancé avec sudo." exit 1 fi # --- 1. CONFIGURATION DYNAMIQUE --- HOSTNAME=$(hostname) SMTP_HOST="mail.acemail.fr" SMTP_PORT="587" SMTP_USER="srv@a5l.fr" DEST_EMAIL="cedric+${HOSTNAME}@abonnel.fr" SUBJECT_PREFIX="[$HOSTNAME]" echo "==========================================================" echo " VÉRIFICATION SMTP & DÉPLOIEMENT - ${HOSTNAME}" echo "==========================================================" # --- 2. INSTALLATION INITIALE --- DEBIAN_FRONTEND=noninteractive apt update DEBIAN_FRONTEND=noninteractive apt install -y msmtp msmtp-mta bsd-mailx DEBIAN_FRONTEND=noninteractive apt install -y ufw fail2ban unattended-upgrades curl DEBIAN_FRONTEND=noninteractive apt install -y curl bc # --- 3. RÉCUPÉRATION ET TEST DU MOT DE PASSE SMTP --- # Ici, PASS_FILE_ORI pointe probablement vers /etc/msmtprc ou une sauvegarde PASS_FILE_ORI="/etc/msmtprc" AUTH_OK=false while [ "$AUTH_OK" = false ]; do # 1. Tentative d'extraction depuis le fichier de config existant if [ -f "$PASS_FILE_ORI" ]; then # On cherche la ligne commençant par 'password', on ignore les espaces/tabulations, # et on récupère la deuxième colonne. SMTP_PASS=$(grep -E "^password[[:space:]]+" "$PASS_FILE_ORI" | awk '{print $2}') fi if [ -n "$SMTP_PASS" ]; then echo "📄 Mot de passe extrait depuis $PASS_FILE_ORI." else # 2. Sinon, saisie manuelle si le fichier n'existe pas ou ne contient pas de password echo -n "🔑 Mot de passe SMTP non trouvé. Entrez le pour ${SMTP_USER} : " read -s SMTP_PASS echo "" fi echo "⏳ Vérification de la connexion SMTP..." # Création config temporaire pour le test cat > /tmp/.msmtp_test </dev/null if [ $? -eq 0 ]; then echo "✅ Authentification SMTP réussie !" AUTH_OK=true rm /tmp/.msmtp_test else echo "❌ Échec de l'authentification SMTP." # Si le password extrait était mauvais, on vide la variable pour forcer la saisie au prochain tour if [ -f "$PASS_FILE_ORI" ]; then echo "⚠️ Le mot de passe extrait de $PASS_FILE_ORI est incorrect." SMTP_PASS="" PASS_FILE_ORI="/dev/null" # On "désactive" la lecture fichier pour ce tour fi rm /tmp/.msmtp_test fi done # --- 4. CONFIGURATION DES ALIASES --- echo "--- 4. Vérification et configuration des redirections (Aliases) ---" ALIAS_FILE="/etc/aliases" # On s'assure que le fichier existe (certaines distros minimales ne l'ont pas) [ ! -f "$ALIAS_FILE" ] && touch "$ALIAS_FILE" # Vérification pour root if grep -q "^root:" "$ALIAS_FILE"; then # Si root existe mais pointe vers autre chose, on met à jour sed -i "s|^root:.*|root: $DEST_EMAIL|" "$ALIAS_FILE" echo "✅ Alias 'root' mis à jour vers $DEST_EMAIL." else # Sinon on l'ajoute echo "root: $DEST_EMAIL" >> "$ALIAS_FILE" echo "✅ Alias 'root' ajouté." fi # Vérification pour default if grep -q "^default:" "$ALIAS_FILE"; then sed -i "s|^default:.*|default: $DEST_EMAIL|" "$ALIAS_FILE" echo "✅ Alias 'default' mis à jour." else echo "default: $DEST_EMAIL" >> "$ALIAS_FILE" echo "✅ Alias 'default' ajouté." fi # --- 5. CONFIGURATION MSMTP --- echo "--- 5. Vérification de la configuration MSMTP ---" # 1. Génération de la configuration cible dans un fichier temporaire TMP_MSMTP=$(mktemp) cat > "$TMP_MSMTP" < /dev/null; then echo "🔄 La configuration a changé. Mise à jour de $MSMTP_CONF..." SHOULD_UPDATE=true else echo "✅ La configuration MSMTP est déjà à jour et identique." fi fi # 3. Application et sécurisation if [ "$SHOULD_UPDATE" = true ]; then cp "$TMP_MSMTP" "$MSMTP_CONF" # --- CORRECTIONS DES DROITS --- # On donne le fichier au groupe msmtp pour permettre l'accès au binaire chown root:msmtp "$MSMTP_CONF" # 640 : Root lit/écrit, le groupe msmtp lit, les autres rien (sécurité du mot de passe) chmod 640 "$MSMTP_CONF" # On s'assure que le binaire msmtp peut lire ce fichier quel que soit l'utilisateur # Le bit 's' (setgid) permet à msmtp de prendre l'identité du groupe 'msmtp' chmod g+s /usr/bin/msmtp # On règle le problème du log une fois pour toutes (lecture/écriture pour tous) touch /var/log/msmtp.log chown root:msmtp /var/log/msmtp.log chmod 666 /var/log/msmtp.log fi # Nettoyage du fichier temporaire rm -f "$TMP_MSMTP" # --- 6. INTERCEPTION GLOBALE (LE WRAPPER) --- echo "--- 6. Création du wrapper sendmail pour préfixer les objets ---" # On crée un script qui va modifier le sujet à la volée cat > /usr/local/bin/msmtp-wrapper < "$DEST_PATH" </dev/null | grep -v "sys_check.sh" ; echo "04 * * * * /usr/local/bin/sys_check.sh") | crontab - # --- 9. RAPPORT FINAL --- echo "Déploiement terminé de ${0} sur ${HOSTNAME}" | mail -s "Setup OK" "$DEST_EMAIL" echo "✅ Terminé ! Teste avec : echo 'test' | mail -s 'Sujet simple' root" rm ${0}