notes-techniques/notes/scripts/server-mail/generate_password.sh

83 lines
2.5 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Récupérer le nom dhôte complet (FQDN)
SERVER_NAME=$(hostname -f) # Privilégier hostname -f
# Vérifier si le FQDN est vide (cas rare)
if [[ -z "$SERVER_NAME" ]]; then
SERVER_NAME=$(cat /etc/hostname) # Lecture depuis /etc/hostname
fi
# Construire l'URL du serveur
SERVER_URL="http://$SERVER_NAME/passwords"
echo "Serveur détecté : $SERVER_NAME"
DOVECOT_USERS="/etc/dovecot/users"
WEB_DIR="/var/www/passwords"
EXPIRATION_TIME=600 # 10 minutes avant suppression
if [[ -z "$1" ]]; then
echo "Usage: $0 <adresse email>"
exit 1
fi
EMAIL=$1
# Vérifier si l'utilisateur existe
if ! grep -q "^$EMAIL:" "$DOVECOT_USERS"; then
echo "Erreur : L'utilisateur $EMAIL n'existe pas. Utilisez 'create_user.sh' d'abord."
exit 1
fi
# Génération d'un mot de passe sécurisé
PASSWORD=$(tr -dc 'A-Za-z0-9@#%&*()-_=+' </dev/urandom | head -c 20)
# Hachage sécurisé du mot de passe
HASHED_PASS=$(doveadm pw -s SHA512-CRYPT -p "$PASSWORD")
# Mettre à jour le mot de passe dans le fichier des utilisateurs
sed -i "s|^$EMAIL:.*|$EMAIL:$HASHED_PASS|" "$DOVECOT_USERS"
# Génération d'un lien temporaire
mkdir -p "$WEB_DIR"
chmod 750 "$WEB_DIR"
FILE_ID=$(uuidgen)
FILE_PATH="$WEB_DIR/$FILE_ID.html"
# Création de la page HTML temporaire
cat <<EOF > "$FILE_PATH"
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Votre nouveau mot de passe</title>
<style>
body { font-family: Arial, sans-serif; text-align: center; padding: 50px; }
.container { background: #f4f4f4; padding: 20px; border-radius: 10px; display: inline-block; }
h1 { color: #333; }
.password { font-size: 20px; font-weight: bold; background: #ddd; padding: 10px; border-radius: 5px; }
</style>
</head>
<body>
<div class="container">
<h1>Votre nouveau mot de passe</h1>
<p>Adresse email : <strong>$EMAIL</strong></p>
<p>Mot de passe temporaire :</p>
<p class="password">$PASSWORD</p>
<p><strong>Notez-le, cette page sera supprimée après consultation.</strong></p>
</div>
<script>
fetch(window.location.href, { method: 'DELETE' }).then(() => console.log('Fichier supprimé'));
</script>
</body>
</html>
EOF
chmod 600 "$FILE_PATH"
# Suppression automatique après expiration
(sleep $EXPIRATION_TIME && rm -f "$FILE_PATH") &
echo "Mot de passe mis à jour pour $EMAIL"
echo "Lien temporaire pour récupérer le mot de passe : $SERVER_URL/$FILE_ID.html"