« LINUX:MariaDB » : différence entre les versions
Aucun résumé des modifications |
Aucun résumé des modifications |
||
Ligne 82 : | Ligne 82 : | ||
. | . | ||
Change the root password? [Y/n] '''y''' | Change the root password? [Y/n] '''y''' | ||
New password:'''< | New password:'''<VOTRE_MOT_DE_PASSE_ROOT>''' | ||
Re-enter new password:'''<VOTRE_MOT_DE_PASSE>''' | Re-enter new password:'''<VOTRE_MOT_DE_PASSE>''' | ||
Password updated successfully! | Password updated successfully! | ||
Ligne 131 : | Ligne 131 : | ||
Vous pouvez aussi utiliser les commandes de | Vous pouvez aussi utiliser les commandes de ligne SQL, ce que je préfère. | ||
* Changer le mot de passe de l'utilisateur "root"; au passage, on lui confirme tous les privilèges. | * Changer le mot de passe de l'utilisateur "root"; au passage, on lui confirme tous les privilèges. | ||
Voici le script SQL à mettre dans un fichier du nom, par exemple, "user.root.sql": | Voici le script SQL à mettre dans un fichier du nom, par exemple, "user.root.sql": | ||
---- | ---- | ||
alter user 'root'@'localhost' identified by ' | alter user 'root'@'localhost' identified by 'VOTRE_MOT_DE_PASSE_ROOT' ; | ||
grant all privileges on *.* to 'root'@'localhost' with grant option ; | grant all privileges on *.* to 'root'@'localhost' with grant option ; | ||
flush privileges ; | flush privileges ; | ||
---- | ---- | ||
On exécute la ligne de | On exécute la ligne de commande suivante sans mot de passe car il n'y en a pas encore: | ||
---- | ---- | ||
mysql -- | mysql --user=root < user.root.sql | ||
---- | ---- | ||
* Eliminer l'utilisateur "mysql". | |||
Voici le script SQL à mettre dans un fichier du nom, par exemple, "user.mysql.sql": | |||
---- | |||
drop user 'mysql'@'localhost' ; | |||
flush privileges ; | |||
---- | |||
On exécute la ligne de commande suivante avec le mot de passe cette fois: | |||
---- | |||
mysql --user=root --password=VOTRE_MOT_DE_PASSE_ROOT < user.mysql.sql | |||
---- | |||
* Eliminer le schéma "test" s'il existe. | |||
Voici le script SQL à mettre dans un fichier du nom, par exemple, "drop.test.sql": | |||
---- | |||
DROP SCHEMA IF EXISTS test ; | |||
---- | |||
On exécute la ligne de commande suivante avec aussi le mot de passe: | |||
---- | |||
mysql --user=root --password=VOTRE_MOT_DE_PASSE_ROOT < drop.test.sql | |||
---- | |||
Version du 26 décembre 2020 à 23:42
But
MariaDB est un gestionnaire de base de données client-serveur utilisant le langage SQL. Il fait suite à MySQL. Il est souvent utilisé au même titre que PostgreSQL, autre gestionnaire de base de données.
Installation
On a besoin d'installer un package qui installera les dépendances nécessaires:
dnf install mariadb mariadb-server
Configuration
Les fichiers de configurations se trouvent dans le répertoire "/etc/my.cnf.d". Parmi ceux-ci, un seul nous intéresse: mariadb-server.cnf".
Par défaut, la base de données se crée dans le répertoire "/var/lib/mysql" mais nous préférons l'installer sur un disque à part. Dans notre cas, nous choisissons le répertoire "/produc/mysql".
Il faut le créer:
mkdir /produc/mysql
Il faut le faire appartenir à l'utilisateur pour lequel le service est lancé:
chown -R mysql:mysql /produc/mysql
et les privilèges:
chmod -R 660 /produc/mysql
Maintenant, il faut modifier le fichier configuration du serveur MariaDB, "/etc/my.cnf.d/mariadb-server.cnf". On modifie ou ajoutons quelques options sous la balise "[mysqld]":
[server] [mysqld] # répertoire contenant la base de données datadir=/produc/mysql # Socket, PID, journaux: de préférence, ne pas modifier socket=/var/lib/mysql/mysql.sock log-error=/var/log/mariadb/mariadb.log pid-file=/var/run/mariadb/mariadb.pid # niveau de journalisation, utile pour Fail2Ban log-warnings=2 # nécessaire pour OPAC et WATERBEAR ft_min_word_len = 1 # divers options à adapter en fonction de l'utilisation sql-mode="NO_ENGINE_SUBSTITUTION" max_allowed_packet=64M innodb-log-file-size=256M character-set-server=utf8 open_files_limit = 10000
Activer et lancer le service
Le service à lancer est mariadb. La première commande active le service pour qu'à chaque démarrage du serveur, le service se lance. La seconde lance directement le service. La troisième relance le service.
systemctl enable mariadb systemctl start mariadb systemctl restart mariadb
Sécurité
Lors du premier lancement du serveur, la base de données va être initialisée. Attention, si vous introduisez l'option "ft_min_word_len=1" vue ci-dessus, à postériori, vous devrez effectuer une mise à niveau de la base de données, une réindexation.
A ce stade, il n'existe qu'un utilisateur "root" ayant tous les privilèges mais sans mot de passe. Il est primordial de mettre un mot de passe. En outre, il y existe dans certaines configurations de base un schéma de "test" qui est à supprimer.
Exécutez le script suivant:
mysql_secure_installation
A la majorité des questions de type "Yes or No" (Y/n), on répond "Y" et on donne un mot de passe. Voici un exemple:
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! . In order to log into MariaDB to secure it, we'll need the current password for the root user. If you've just installed MariaDB, and haven't set the root password yet, you should just press enter here. . Enter current password for root (enter for none): OK, successfully used password, moving on... . Setting the root password or using the unix_socket ensures that nobody can log into the MariaDB root user without the proper authorisation. . You already have your root account protected, so you can safely answer 'n'. . Switch to unix_socket authentication [Y/n] n ... skipping. . You already have your root account protected, so you can safely answer 'n'. . Change the root password? [Y/n] y New password:<VOTRE_MOT_DE_PASSE_ROOT> Re-enter new password:<VOTRE_MOT_DE_PASSE> Password updated successfully! Reloading privilege tables.. ... Success! . By default, a MariaDB installation has an anonymous user, allowing anyone to log into MariaDB without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. . Remove anonymous users? [Y/n] Y ... Success! . Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. . Disallow root login remotely? [Y/n] Y ... Success! . By default, MariaDB comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. . Remove test database and access to it? [Y/n] Y - Dropping test database... ... Success! - Removing privileges on test database... ... Success! . Reloading the privilege tables will ensure that all changes made so far will take effect immediately. . Reload privilege tables now? [Y/n] Y ... Success! . Cleaning up... . All done! If you've completed all of the above steps, your MariaDB installation should now be secure. . Thanks for using MariaDB!
Par ce moyen, on ne peut accéder à la base de données que localement. Mais si on se connecte avec un utilisateur Linux "root" ou "mysql", le mot de passe n'est pas nécessaire. Notons que dans les dernières versions, le schéma "test" n'est pas créé.
Vous pouvez aussi utiliser les commandes de ligne SQL, ce que je préfère.
- Changer le mot de passe de l'utilisateur "root"; au passage, on lui confirme tous les privilèges.
Voici le script SQL à mettre dans un fichier du nom, par exemple, "user.root.sql":
alter user 'root'@'localhost' identified by 'VOTRE_MOT_DE_PASSE_ROOT' ; grant all privileges on *.* to 'root'@'localhost' with grant option ; flush privileges ;
On exécute la ligne de commande suivante sans mot de passe car il n'y en a pas encore:
mysql --user=root < user.root.sql
- Eliminer l'utilisateur "mysql".
Voici le script SQL à mettre dans un fichier du nom, par exemple, "user.mysql.sql":
drop user 'mysql'@'localhost' ; flush privileges ;
On exécute la ligne de commande suivante avec le mot de passe cette fois:
mysql --user=root --password=VOTRE_MOT_DE_PASSE_ROOT < user.mysql.sql
- Eliminer le schéma "test" s'il existe.
Voici le script SQL à mettre dans un fichier du nom, par exemple, "drop.test.sql":
DROP SCHEMA IF EXISTS test ;
On exécute la ligne de commande suivante avec aussi le mot de passe:
mysql --user=root --password=VOTRE_MOT_DE_PASSE_ROOT < drop.test.sql
Configurer le mur de feu ou FireWall
Normalement, on doit désactiver l'accès à distance à cette base de données. En l'état il n'y a pas d'utilisateur configuré pour cela.
Vous pouvez explicitement ajouter une règle au FireWall qui rejete ces demandes d'accès en fonction de la configuration. Normalement une bonne configuration doit tout rejeter sauf ce qui est explicitement permis. Le port par défaur est 3306.
Voici cette règle pour IPTABLES:
-A INPUT -p tcp -m tcp --dport 3306 -j DROP
Par contre, si on veux y accéder à distance, il faut ajouter un utilisateur adéqua et ajouter une règle au FireWall.
Dans l'exemple, Notre LAN permet l'accès; son adressage est 192.168.1.0 avec un masque de 255.255.255.0 ou de 24 bits. Nous utilisons IPTABLES; voici la ligne à ajouter:
-A INPUT -p tcp -m tcp --dport 139 -s 192.168.1.0/24 -j ACCEPT