165 lines
5.2 KiB
Bash
Executable File
165 lines
5.2 KiB
Bash
Executable File
#!/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
|
|
|
|
# Mise à jour du système
|
|
update_system
|
|
|
|
PASS_FILE=~/mariadb_root_password.txt
|
|
DEBIAN_CNF=/etc/mysql/debian.cnf
|
|
MARIADB_CNF=/etc/mysql/mariadb.conf.d/50-server.cnf
|
|
|
|
echo "=== Installation de MariaDB ==="
|
|
apt install -y mariadb-server mariadb-client
|
|
|
|
echo "=== Activation et démarrage de MariaDB ==="
|
|
systemctl enable mariadb
|
|
systemctl start mariadb
|
|
|
|
echo "=== Configuration du bind-address pour bloquer les connexions externes ==="
|
|
if grep -q "^bind-address" $MARIADB_CNF; then
|
|
sed -i 's/^bind-address.*/bind-address = 127.0.0.1/' $MARIADB_CNF
|
|
else
|
|
echo "bind-address = 127.0.0.1" >> $MARIADB_CNF
|
|
fi
|
|
|
|
echo "=== Activation du log binaire et purge automatique des anciens logs ==="
|
|
if ! grep -q "^log-bin" "$MARIADB_CNF"; then
|
|
cat >> "$MARIADB_CNF" <<EOL
|
|
|
|
# Journalisation binaire activée pour la réplication et la sécurité
|
|
log-bin = /var/log/mysql/mariadb-bin
|
|
expire_logs_days = 7
|
|
EOL
|
|
fi
|
|
|
|
echo "=== Vérification et création du répertoire pour les binlogs ==="
|
|
mkdir -p /var/log/mysql
|
|
chown mysql:mysql /var/log/mysql
|
|
chmod 750 /var/log/mysql
|
|
|
|
|
|
systemctl restart mariadb
|
|
|
|
echo "=== Gestion du mot de passe administrateur ==="
|
|
|
|
# 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
|
|
}
|
|
|
|
# Générer ou récupérer le mot de passe root MariaDB
|
|
if [[ -f "$PASS_FILE" ]]; then
|
|
DB_ROOT_PASSWORD=$(grep 'root password:' "$PASS_FILE" | awk '{print $3}')
|
|
echo "Mot de passe root existant récupéré."
|
|
else
|
|
# 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
|
|
# Tentative dans d'autres fichiers .cnf ou .conf connus
|
|
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 pas de mot de passe trouvé, demander ou générer
|
|
if [[ -z "$DB_ROOT_PASSWORD" ]]; then
|
|
echo -n "Entrez un mot de passe root pour MariaDB ou le mot de passe existant (laisser vide pour générer automatiquement) : "
|
|
read -r -s USER_PASSWORD
|
|
echo
|
|
if [[ -n "$USER_PASSWORD" ]]; then
|
|
DB_ROOT_PASSWORD="$USER_PASSWORD"
|
|
echo "Mot de passe root défini par l'utilisateur."
|
|
else
|
|
DB_ROOT_PASSWORD=$(generate_token 64)
|
|
echo "Mot de passe root généré automatiquement."
|
|
echo "root password: $DB_ROOT_PASSWORD" > "$PASS_FILE"
|
|
chmod 600 "$PASS_FILE"
|
|
echo "Mot de passe root sauvegardé dans $PASS_FILE."
|
|
fi
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
echo "=== Sécurisation de MariaDB ==="
|
|
mysql -u root -p"$DB_ROOT_PASSWORD" <<EOF
|
|
-- Définir le mot de passe root correctement
|
|
ALTER USER 'root'@'localhost' IDENTIFIED BY '$DB_ROOT_PASSWORD';
|
|
|
|
-- Supprimer les utilisateurs anonymes
|
|
DELETE FROM mysql.user WHERE User='';
|
|
|
|
-- Supprimer tout accès root externe ou d'autres users externes
|
|
DELETE FROM mysql.user WHERE Host NOT IN ('localhost', '127.0.0.1', '::1');
|
|
|
|
-- Supprimer la base de test si elle existe
|
|
DROP DATABASE IF EXISTS test;
|
|
|
|
-- Supprimer les droits sur la base de test
|
|
DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';
|
|
|
|
-- Recharger les privilèges
|
|
FLUSH PRIVILEGES;
|
|
EOF
|
|
|
|
echo "=== Mise à jour de /etc/mysql/debian.cnf pour les scripts de maintenance ==="
|
|
cat > /etc/mysql/debian.cnf <<EOL
|
|
[client]
|
|
host = localhost
|
|
user = root
|
|
password = $DB_ROOT_PASSWORD
|
|
socket = /run/mysqld/mysqld.sock
|
|
|
|
[mysql_upgrade]
|
|
host = localhost
|
|
user = root
|
|
password = $DB_ROOT_PASSWORD
|
|
socket = /run/mysqld/mysqld.sock
|
|
EOL
|
|
chmod 600 /etc/mysql/debian.cnf
|
|
|
|
echo "=== Vérification de la présence de PHP ==="
|
|
if command -v php >/dev/null 2>&1; then
|
|
PHP_VERSION=$(php -r 'echo PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')
|
|
echo "PHP version détectée : $PHP_VERSION"
|
|
|
|
echo "=== Installation de php-mysql pour PHP $PHP_VERSION ==="
|
|
apt install -y php${PHP_VERSION}-mysql
|
|
|
|
echo "=== Redémarrage d'Apache si installé ==="
|
|
if systemctl list-units --type=service | grep -q apache2; then
|
|
systemctl restart apache2
|
|
echo "Apache redémarré"
|
|
fi
|
|
|
|
echo "=== Redémarrage de PHP-FPM si installé ==="
|
|
if systemctl list-units --type=service | grep -q php${PHP_VERSION}-fpm; then
|
|
systemctl restart php${PHP_VERSION}-fpm
|
|
echo "PHP-FPM redémarré"
|
|
fi
|
|
else
|
|
echo "PHP n'est pas installé. Installation de MariaDB terminée sans liaison PHP."
|
|
fi
|
|
|
|
echo "=== Fin de l'installation et sécurisation de MariaDB ==="
|