« MySQL » : différence entre les versions

De NCad Wiki
Aller à la navigation Aller à la recherche
Ligne 137 : Ligne 137 :
{{ Box Console | objet=sudo chown mysql:mysql /etc/mysql/ssl -R }}
{{ Box Console | objet=sudo chown mysql:mysql /etc/mysql/ssl -R }}


* On édite le fichier '''/etc/apparmor.d/usr.sbin.mysqld''' et on y insère les éléments suivants :
* 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/*.pem r,

Version du 5 février 2014 à 15:21

Installation

libhtml-template-perl mysql-server-5.5 mysql-server-core-5.5

  • À la question Nouveau mot de passe du superutilisateur MySQL, renseigner le mot de passe du compte root pour MySQL (indépendant du compte root UNIX)
  • Éditer le fichier /etc/mysql/my.cnf puis rechercher la ligne bind-address et indiquer l'adresse IP local de la machine où est installé MySQL.
bind-address                 = 10.0.0.47
  • Redémarrer le service mysql pour appliquer les changements :

service mysql restart

  • Première connexion au serveur avec le compte root :

mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 42
Server version: 5.5.35-0ubuntu0.12.04.2 (Ubuntu)

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>


Le compte root n'est accessible qu'en local uniquement.
  • On va créer l'utilisateur cacheln avec le mot de passe cacheln pouvant se connecter au compte depuis n'importe quelle machine (%) :

CREATE USER 'cacheln'@'%' IDENTIFIED BY 'cacheln';
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 ;

  • On créer la base de données cacheln :

CREATE DATABASE IF NOT EXISTS `cacheln`;

  • On attribut tous les privilège à l'utilisateur cacheln sur la base de données cacheln :

GRANT ALL PRIVILEGES ON `cacheln` . * TO 'cacheln'@'%';

SSL

  • Vérifier votre version de Openssl avant de poursuivre :

openssl version
OpenSSL 1.0.1c 10 May 2012

La version 1.0.1c n'est pas supporté par MySQL. Il sera nécessaire d'installer une version antérieure pour poursuivre.

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 :

cd /etc/ssl/private

  • On génère la clé privée :

sudo openssl genrsa -out ca.key 2048 -des3

Cette clé va nous permettre de signer nos propres certificats.

Création du certificat auto-signé

  • On lance la création de certificat auto-signé :

openssl req -new -x509 -nodes -days 365 -key ca.key -out ca.crt
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
- - - --
Country Name (2 letter code) [AU]:FR
State or Province Name (full name) [Some-State]:Paris
Locality Name (eg, city) []:Paris
Organization Name (eg, company) [Internet Widgits Pty Ltd]:NCad Network
Organizational Unit Name (eg, section) []:Autorité de certification
Common Name (e.g. server FQDN or YOUR name) []:Murdoc Certificats pour GLX
Email Address []:tech@ncad.fr

Certificat serveur

  • On génère la clé privée :

sudo openssl genrsa -out mysql.key 2048

  • On génère un fichier de demande de signature de certificat :

sudo openssl req -new -key mysql.key -out mysql.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
- - - - -
Country Name (2 letter code) [AU]:FR
State or Province Name (full name) [Some-State]:Paris
Locality Name (eg, city) []:Paris
Organization Name (eg, company) [Internet Widgits Pty Ltd]:NCad Network
Organizational Unit Name (eg, section) []:Intranet Goulouxiou
Common Name (e.g. server FQDN or YOUR name) []:10.0.0.47
Email Address []:tech@ncad.fr

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:N'importe quoi.
An optional company name []:NCad Network

  • On signe notre certificat à l'aide du certificat auto-signé de notre autorité de certification (précédemment créée) :

openssl x509 -req -in mysql.csr -days 365 -CA ca.crt -CAkey ca.key -set_serial 01 -out mysql.crt
Signature ok
subject=/C=FR/ST=Paris/L=Paris/O=NCad Network/OU=Intranet
Goulouxiou/CN=10.0.0.47/emailAddress=tech@ncad.fr
Getting CA Private Key

Configuration du serveur MySQL

  • On déplace les certificats crées dans /etc/ssl/private vers /etc/mysql/ssl

sudo mkdir -p /etc/mysql/ssl
cp /etc/ssl/private/ca.* /etc/mysql/ssl
cp /etc/ssl/private/mysql.* /etc/mysql/ssl

  • On applique les permissions et droits mysql sur les certificats :

sudo chown mysql:mysql /etc/mysql/ssl -R

  • 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 é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

Validation

mysql> show variables like "%ssl%";
+---------------+--------------------------+
| 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)
mysql> show status like 'Ssl_cipher';
+---------------+--------------------+
| Variable_name | Value              |
+---------------+--------------------+
| Ssl_cipher    | DHE-RSA-AES256-SHA |
+---------------+--------------------+
1 row in set (0.01 sec)