« MySQL » : différence entre les versions
Aucun résumé des modifications |
|||
Ligne 1 : | Ligne 1 : | ||
= Topologie = | |||
* Voici un schéma de la maquette qui sera utilisée pour illustrer cette documentation. | * Voici un schéma de la maquette qui sera utilisée pour illustrer cette documentation. | ||
Ligne 5 : | Ligne 5 : | ||
[[Image:MySQL_Maquette|center]] | [[Image:MySQL_Maquette|center]] | ||
= Installation = | |||
* Depuis '''Ubuntu''', le serveur '''MySQL''' s'installe depuis les paquets '''mysql-server''' et '''mysql-common'''. | * Depuis '''Ubuntu''', le serveur '''MySQL''' s'installe depuis les paquets '''mysql-server''' et '''mysql-common'''. | ||
Ligne 43 : | Ligne 43 : | ||
{{ Box Remarque | objet=Le compte root n'est accessible qu'en local uniquement. }} | {{ Box Remarque | objet=Le compte root n'est accessible qu'en local uniquement. }} | ||
= Commandes de base = | |||
== Création d'un utilisateur == | |||
* On va créer l'utilisateur '''cacheln''' avec le mot de passe '''cacheln''' pouvant se connecter au compte depuis '''n'importe quelle machine''' ''(%)'' : | * On va créer l'utilisateur '''cacheln''' avec le mot de passe '''cacheln''' pouvant se connecter au compte depuis '''n'importe quelle machine''' ''(%)'' : | ||
Ligne 52 : | Ligne 52 : | ||
GRANT USAGE ON * . * TO 'cacheln'@'%' IDENTIFIED BY 'cacheln' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ; }} | GRANT USAGE ON * . * TO 'cacheln'@'%' IDENTIFIED BY 'cacheln' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ; }} | ||
== Création d'une base de données == | |||
* On créer la base de données '''cacheln''' : | * On créer la base de données '''cacheln''' : | ||
Ligne 58 : | Ligne 58 : | ||
{{ Box Console | objet=CREATE DATABASE IF NOT EXISTS `cacheln`; }} | {{ Box Console | objet=CREATE DATABASE IF NOT EXISTS `cacheln`; }} | ||
== Attribution de privilèges sur une base de données == | |||
* On attribut tous les privilège à l'utilisateur '''cacheln''' sur la base de données '''cacheln''' : | * On attribut tous les privilège à l'utilisateur '''cacheln''' sur la base de données '''cacheln''' : | ||
Ligne 64 : | Ligne 64 : | ||
{{ Box Console | objet=GRANT ALL PRIVILEGES ON `cacheln` . * TO 'cacheln'@'%'; }} | {{ Box Console | objet=GRANT ALL PRIVILEGES ON `cacheln` . * TO 'cacheln'@'%'; }} | ||
= | = Connexion SSL = | ||
Si le serveur '''MySQL''' reçoit des connexions depuis des machines extérieures, il est conseillé de mettre en place un accès chiffré de type '''SSL''' afin de garantir '''l'intégrité''' et la '''confidentialité''' des échanges. | |||
== Autorité de certification == | |||
=== Création de la clé privée === | |||
* On se place dans le dossier '''/etc/ssl/private''' qui contient les clés et certificats privées : | * On se place dans le dossier '''/etc/ssl/private''' qui contient les clés et certificats privées : | ||
Ligne 87 : | Ligne 82 : | ||
Cette clé va nous permettre de signer nos propres certificats. | Cette clé va nous permettre de signer nos propres certificats. | ||
=== Création du certificat auto-signé === | |||
* On lance la création du certificat auto-signé : | * On lance la création du certificat auto-signé : | ||
Ligne 107 : | Ligne 102 : | ||
Email Address []:<span style="font-family:sans-serif;color:blue">tech@ncad.fr</span> }} | Email Address []:<span style="font-family:sans-serif;color:blue">tech@ncad.fr</span> }} | ||
== Certificat serveur == | |||
* On génère la clé privée : | * On génère la clé privée : | ||
Ligne 143 : | Ligne 138 : | ||
Getting CA Private Key }} | Getting CA Private Key }} | ||
== Certificat client == | |||
{{ Box Information | objet=On va générer un certificat pour que la machine cliente 10.0.0.47 puisse se connecter au serveur MySQL en utilisant le chiffrement SSL. }} | {{ Box Information | objet=On va générer un certificat pour que la machine cliente 10.0.0.47 puisse se connecter au serveur MySQL en utilisant le chiffrement SSL. }} | ||
Ligne 185 : | Ligne 180 : | ||
{{ Box Remarque | objet=On aurez pu tout aussi bien générer le certificat directement depuis le machine cliente. Dans ce cas, nous aurions eu seulement besoin de copier le fichier ca.pem pour signer le certificat nouvellement généré. }} | {{ Box Remarque | objet=On aurez pu tout aussi bien générer le certificat directement depuis le machine cliente. Dans ce cas, nous aurions eu seulement besoin de copier le fichier ca.pem pour signer le certificat nouvellement généré. }} | ||
== Configuration du serveur MySQL == | |||
* On déplace les certificats crées dans '''/etc/ssl/private''' vers '''/etc/mysql/ssl''' | * On déplace les certificats crées dans '''/etc/ssl/private''' vers '''/etc/mysql/ssl''' | ||
Ligne 221 : | Ligne 216 : | ||
{{ Box Console | objet=service mysql restart }} | {{ Box Console | objet=service mysql restart }} | ||
== Validation == | |||
=== Connexion sans chiffrement === | |||
* Voici une capture de trame entre une connexion '''MySQL''' du '''client''' à l'adresse '''10.0.0.47''' au '''serveur''' MySQL à l'adresse '''10.0.0.44''' : | * Voici une capture de trame entre une connexion '''MySQL''' du '''client''' à l'adresse '''10.0.0.47''' au '''serveur''' MySQL à l'adresse '''10.0.0.44''' : | ||
Ligne 231 : | Ligne 226 : | ||
<p style="font-family:cursive; text-align:center">Nous remarquons les divers échanges '''Request''' et '''Response''' entre le client et le serveur.</p> | <p style="font-family:cursive; text-align:center">Nous remarquons les divers échanges '''Request''' et '''Response''' entre le client et le serveur.</p> | ||
=== Etat du module SSL === | |||
* On se connecte normalement au '''serveur MySQL''' : | * On se connecte normalement au '''serveur MySQL''' : | ||
Ligne 258 : | Ligne 253 : | ||
Les lignes '''have_openssl''' et '''have_ssl''' indique que le chiffrement au niveau du serveur est '''opérationnel'''. | Les lignes '''have_openssl''' et '''have_ssl''' indique que le chiffrement au niveau du serveur est '''opérationnel'''. | ||
=== Connexion avec chiffrement === | |||
* Depuis notre '''machine client''' en '''10.0.0.47''', nous allons nous connecter au '''serveur MySQL''' en '''10.0.0.44''' : | * Depuis notre '''machine client''' en '''10.0.0.47''', nous allons nous connecter au '''serveur MySQL''' en '''10.0.0.44''' : |
Version du 6 avril 2016 à 18:45
Topologie
- Voici un schéma de la maquette qui sera utilisée pour illustrer cette documentation.
Installation
- Depuis Ubuntu, le serveur MySQL s'installe depuis les paquets mysql-server et mysql-common.
|
|
- Pendant le processus d'installation, vous serez invité à renseigner le mot de passe du compte root pour le serveur.
- Par défaut, le serveur écoute uniquement en local. Si vous souhaitez accéder au serveur depuis une autre machine, vous devez éditer le fichier de configuration /etc/mysql/my.cnf puis rechercher la ligne bind-address et indiquer l'adresse IP local du serveur (dans notre cas 10.0.0.44).
bind-address = 10.0.0.44
|
Si votre serveur est équipé d'un pare-feu, vous devez ouvrir le port tcp 3306. |
- Redémarrez le service mysql pour appliquer les changements :
|
|
- Première connexion au serveur avec le compte root :
|
|
Le compte root n'est accessible qu'en local uniquement. |
Commandes de base
Création d'un utilisateur
- On va créer l'utilisateur cacheln avec le mot de passe cacheln pouvant se connecter au compte depuis n'importe quelle machine (%) :
|
|
Création d'une base de données
- On créer la base de données cacheln :
|
|
Attribution de privilèges sur une base de données
- On attribut tous les privilège à l'utilisateur cacheln sur la base de données cacheln :
|
|
Connexion SSL
Si le serveur MySQL reçoit des connexions depuis des machines extérieures, il est conseillé de mettre en place un accès chiffré de type SSL afin de garantir l'intégrité et la confidentialité des échanges.
Autorité de certification
Création de la clé privée
- On se place dans le dossier /etc/ssl/private qui contient les clés et certificats privées :
|
|
- On génère la clé privée :
|
|
Cette clé va nous permettre de signer nos propres certificats.
Création du certificat auto-signé
- On lance la création du certificat auto-signé :
|
|
Certificat serveur
- On génère la clé privée :
|
|
- On génère un fichier de demande de signature de certificat :
|
|
- On signe notre certificat à l'aide du certificat auto-signé de notre autorité de certification (précédemment créée) :
|
|
Certificat client
|
On va générer un certificat pour que la machine cliente 10.0.0.47 puisse se connecter au serveur MySQL en utilisant le chiffrement SSL. |
- On génère la clé privée :
|
|
- On génère un fichier de demande de signature de certificat :
|
|
- On signe notre certificat à l'aide du certificat auto-signé de notre autorité de certification (précédemment créée) :
|
|
- Les fichiers client.crt, client.key et ca.pem devront être copiés sur la machine cliente 10.0.0.47 dans notre cas.
On aurez pu tout aussi bien générer le certificat directement depuis le machine cliente. Dans ce cas, nous aurions eu seulement besoin de copier le fichier ca.pem pour signer le certificat nouvellement généré. |
Configuration du serveur MySQL
- On déplace les certificats crées dans /etc/ssl/private vers /etc/mysql/ssl
|
|
- On applique les permissions et droits mysql sur les certificats :
|
|
- On édite le fichier /etc/apparmor.d/usr.sbin.mysqld et on remplace :
/etc/mysql/*.pem r,
- Par :
/etc/mysql/ssl/*.pem r, /etc/mysql/ssl/*.crt r, /etc/mysql/ssl/*.key r,
- On redémarre le service apparmor pour appliquer les modifications :
|
|
- On édite le fichier de configuration /etc/mysql/my.cnf et on y dé-commente et adapte les lignes suivantes dans la section [mysqld] :
ssl-ca=/etc/mysq/ssl/ca.crt ssl-cert=/etc/mysql/ssl/mysql.crt ssl-key=/etc/mysql/ssl/mysql.key
- On redémarre le service mysql pour appliquer les modifications :
|
|
Validation
Connexion sans chiffrement
- Voici une capture de trame entre une connexion MySQL du client à l'adresse 10.0.0.47 au serveur MySQL à l'adresse 10.0.0.44 :
Nous remarquons les divers échanges Request et Response entre le client et le serveur.
Etat du module SSL
- On se connecte normalement au serveur MySQL :
|
|
- Une fois le prompt prêt on saisit la commande show variables like "%ssl%"; :
|
|
- Et qui doit retourner :
+---------------+--------------------------+ | Variable_name | Value | +---------------+--------------------------+ | have_openssl | YES | | have_ssl | YES | | ssl_ca | /etc/mysq/ssl/ca.crt | | ssl_capath | | | ssl_cert | /etc/mysql/ssl/mysql.crt | | ssl_cipher | | | ssl_key | /etc/mysql/ssl/mysql.key | +---------------+--------------------------+ 7 rows in set (0.02 sec)
Les lignes have_openssl et have_ssl indique que le chiffrement au niveau du serveur est opérationnel.
Connexion avec chiffrement
- Depuis notre machine client en 10.0.0.47, nous allons nous connecter au serveur MySQL en 10.0.0.44 :
|
|
- Une fois le prompt prêt on saisit la commande show variables like "%ssl%"; :
|
|
- Et qui doit retourner :
+---------------+--------------------+ | Variable_name | Value | +---------------+--------------------+ | Ssl_cipher | DHE-RSA-AES256-SHA | +---------------+--------------------+ 1 row in set (0.01 sec)
La ligne Ssl_cipher nous indique le mode de chiffrement employé. Si ce dernier n'était pas utilisé pour la connexion en cours, la valeur aurait été nulle.
- Maintenant, voici une capture de trame entre une connexion MySQL du client à l'adresse 10.0.0.47 au serveur MySQL à l'adresse 10.0.0.44 :
Nous remarquons que les échanges Request et Response entre le client et le serveur ne sont plus visibles. La totalité des échanges sont chiffrés.