#!/bin/bash # Basé sur un travail de Cédric Abonnel / Cédrix sous licence CC BY-NC 4.0 # Importer les fonctions communes source "$(dirname "$0")/../common/common_utils.sh" # Vérifier si le script est exécuté en root check_root echo "=== Gestion du mot de passe administrateur ===" # Vérifier la présence de la commande mysql if ! command -v mysql >/dev/null 2>&1; then echo "❌ La commande 'mysql' est introuvable. Veuillez l'installer." exit 1 fi # Fonction de recherche dans un fichier cnf ou conf get_password_from_cnf() { local file=$1 if [[ -f "$file" ]]; then PASSWORD=$(grep -m1 'password\s*=' "$file" | sed -E 's/.*password\s*=\s*//;s/"//g') if [[ -n "$PASSWORD" ]]; then echo "$PASSWORD" return 0 fi fi return 1 } # Tentative de récupération depuis /etc/mysql/debian.cnf DB_ROOT_PASSWORD=$(get_password_from_cnf "/etc/mysql/debian.cnf") if [[ -n "$DB_ROOT_PASSWORD" ]]; then echo "✅ Mot de passe root récupéré depuis /etc/mysql/debian.cnf" else # Recherche dans d'autres fichiers .cnf ou .conf for file in /etc/mysql/*.cnf /etc/mysql/conf.d/*.cnf /etc/my.cnf /etc/my.cnf.d/*.cnf; do DB_ROOT_PASSWORD=$(get_password_from_cnf "$file") if [[ -n "$DB_ROOT_PASSWORD" ]]; then echo "✅ Mot de passe root trouvé dans $file" break fi done fi # Si toujours rien, demande à l'utilisateur if [[ -z "$DB_ROOT_PASSWORD" ]]; then echo -n "🔐 Entrez le mot de passe root pour MariaDB : " read -r -s USER_PASSWORD echo DB_ROOT_PASSWORD="$USER_PASSWORD" fi # Création d'un fichier temporaire sécurisé pour la connexion MySQL TEMP_CNF=$(mktemp) chmod 600 "$TEMP_CNF" cat > "$TEMP_CNF" </dev/null; then echo "❌ Échec de la connexion avec le mot de passe root. Arrêt du script." rm -f "$TEMP_CNF" exit 1 fi echo "✅ Connexion root réussie." # Définir la variable MYSQL_CMD pour le reste du script MYSQL_CMD="mysql --defaults-extra-file=$TEMP_CNF" # N'oublie pas de prévoir un nettoyage à la fin : trap 'rm -f "$TEMP_CNF"' EXIT echo "=== Création d'une nouvelle base de données MariaDB ===" # Lecture du nom de la base de données read -rp "Nom de la base de données : " DB_NAME if [[ -z "$DB_NAME" ]]; then echo "❌ Nom de base de données requis." rm -f "$TEMP_CNF" exit 1 fi # Vérification de l'existence de la base de données DB_EXISTS=$(mysql --defaults-extra-file="$TEMP_CNF" -sse "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME='$DB_NAME'") if [[ "$DB_EXISTS" == "$DB_NAME" ]]; then echo "❌ La base de données '$DB_NAME' existe déjà." rm -f "$TEMP_CNF" exit 1 fi # Lecture du nom de l'utilisateur read -rp "Nom de l'utilisateur : " DB_USER if [[ -z "$DB_USER" ]]; then echo "❌ Nom d'utilisateur requis." rm -f "$TEMP_CNF" exit 1 fi # Vérification de l'existence de l'utilisateur USER_EXISTS=$(mysql --defaults-extra-file="$TEMP_CNF" -sse "SELECT COUNT(*) FROM mysql.user WHERE user='$DB_USER'") if [[ "$USER_EXISTS" -gt 0 ]]; then echo "ℹ️ L'utilisateur '$DB_USER' existe déjà. Il ne sera pas recréé." CREATE_USER_SQL="" USER_PASS_TO_SAVE="" else echo "✅ L'utilisateur '$DB_USER' sera créé." # Demande du mot de passe utilisateur ou génération read -rsp "Mot de passe de l'utilisateur (laisser vide pour générer) : " DB_PASS echo if [[ -z "$DB_PASS" ]]; then DB_PASS=$(generate_token 64) echo "🔑 Mot de passe généré : $DB_PASS" fi CREATE_USER_SQL="CREATE USER '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';" USER_PASS_TO_SAVE="$DB_PASS" fi # Création de la base et attribution des droits SQL=$(cat < "$CRED_FILE" echo "🔒 Identifiants sauvegardés dans $CRED_FILE" fi # Nettoyage du fichier temporaire de connexion rm -f "$TEMP_CNF"