MySQL Workbench sous Ubuntu 12.04

Je parlais l’autre jour d’un problème lors du passage d’Ubuntu 13.04 à Ubuntu 13.10. Nombreux sont ceux qui, pour éviter ce genre de désagrément, préfèrent rester sur des versions dites LTS. La dernière en date chez Ubuntu est la 12.04. Malheureusement, même s’il y a moins de risque de rencontrer de problème sur ces versions, les paquets qui sont proposés sont souvent assez vieux ou certaines librairies absentes.

C’est notamment le cas avec MySQL Workbench. Ce logiciel de gestion de base de données MySQL est l’outil parfait pour bon nombre de tâches comme l’administration, la duplication, la conception, … de base de données. Malheureusement, à moins de se contenter de l’ancienne version disponible dans le dépôts officiel et installable en faisant

apt-get install mysql-workbench

il n’est pas possible d’installer la dernière version. Ceci prive d’un grand nombre de nouveautés particulièrement intéressantes. Ceci est tout simplement dû à l’absence de la librairie libctemplate0, celle ci ayant été remplacée par sa version plus récente libctemplate2, nécessaire au bon fonctionnement de MySQL Workbench. Heureusement, cette librairie est disponible dans les dépôts de Debian et il suffit de la récupérer et de l’installer pour pouvoir enfin jouir d’un gestionnaire de base de données efficace et fonctionnel.

La librairie est disponible à cette adresse :
http://ftp.br.debian.org/debian/pool/main/c/ctemplate/libctemplate0_0.97-1_amd64.deb

D’autres personnes suggèrent de recompiler MySQL Workbench en modifiant la référence à libctemplate0 par celle de libctemplate2, donc la nouvelle. Cette étape me semble en effet la plus pérenne et efficace mais elle demande plus de connaissances.

Source : http://bugs.mysql.com/bug.php?id=67322

Dumper et importer une base de données MySQL

Las sauvegardes de sa base de données sont les meilleurs moyens de s’assurer de ne jamais perdre aucune information. Cependant, pour faire une sauvegarde, il faut savoir dumper sa base puis la réintégrer. Voilà comment faire :

Dumper sa base de données

Il existe différentes manières de dumper des bases de données. On peut exporter toutes les bases de données hébergées à l’aide de la commande :

mysqldump -u <NOM_D'UTILISATEUR> -p --all-databases > <NOM_DU_FICHIER>.sql

On peut aussi automatiser la tâche en incluant le mot de passe de l’utilisateur ainsi :

mysqldump -u <NOM_D'UTILISATEUR> --password=<MOT_DE_PASSE> --all-databases > <NOM_DU_FICHIER>.sql

l’option –all-databases peut être utilisée sous sa forme courte -A

On peut sélectionner une seule base de données que l’ont souhaite dumper en rajoutant simplement son nom :

mysqldump -u <NOM_D'UTILISATEUR> --password=<MOT_DE_PASSE> <NOM_DE _LA_BASE_A_DUMPER> > <NOM_DU_FICHIER>.sql

Il est enfin possible d’en dumper plusieurs à la fois ainsi :

mysqldump -u <NOM_D'UTILISATEUR> --password=<MOT_DE_PASSE> <NOM_DE _LA_PREMIERE_BASE> <NOM_DE _LA_DEUXIEME_BASE> <NOM_DE _LA_TROISIEME_BASE> > <NOM_DU_FICHIER>.sql

Bien d’autres options existent comme le dump uniquement de certaines tables, etc… Elles sont disponibles dans la manpage de mysqldump.

Importer sa base de données

Une fois le dump effectué, il faut pouvoir le réintégrer en cas de besoin. Pour ce faire, le nombre de possibilités se réduit car il suffit de faire :

mysql -u <NOM_D'UTILISATEUR> -p <NOM_DE_LA_BASE> < <NOM_DU_FICHIER>.sql

Si une erreur se produit disant que la base de données n’a pas pu être trouvée, créez la auparavant dans MySQL avant de réessayer.

Changer le mot de passe root de MySQL

J’ai essayé l’autre jour de me connecter en root à mon Serveur MySQL local fournit par LAMPP mais force était de me rendre compte que j’avais oublié mon mot de passe. J’ai donc chercher le moyen de réinitialiser celui ci sans utiliser la méthode simple du « j’enlève  LAMPP et j’en remet un neuf ».

Il existe plusieurs manières de procéder. Ce que je décris ici cependant ne fonctionne qu’avec une installation classique de MySQL. Il faudra l’adapter si vous avez un LAMPP installé dans /opt/ par exemple.

  • On peut suivre point par point la documentation officielle.
  • On peut aussi procéder de manière à ne pas prendre en compte le réseau. Ceci n’est réellement utile que lorsque les bases de données sont accessibles depuis l’extérieur. (Bouh c’est pas bien, il ne faut jamais faire ça) :
    • Arrêter sa base de donnée MySQL à l’aide de la commande :
      /etc/init.d/mysql stop
    • Lancer MySQL en désactivant l’authentification et l’écoute réseau :
      mysqld --skip-grant-tables --skip-networking &
    • Se connecter à sa base de données :
      mysql -u root
    • Réinitialiser le mot de passe root:
      UPDATE user SET password=PASSWORD('<NOUVEAU_MOT_DE_PASSE') WHERE user="root";
    • Quitter MySQLpuis redémarrer :
      /etc/init.d/mysql restart

Revoilà alors une base de données avec un mot de passe root tout neuf.

Changer le mot de passe d’un utilisateur MySQL

Je viens juste de me retrouver dans le cas où j’avais oublié le mot de passe d’un de mes utilisateur MySQL. Il fallait donc que je puisse soit le retrouver, mais je n’ai pas le temps de m’amuser à faire du brute force sur des hash surtout que je sais que le mot de passe que j’ai mis est extrêmement long, soit le changer.

Vu que l’utilisateur root n’est pas là que pour créer des BDD et des utilisateurs, il faut bien s’en servir. On va donc commencer par se connecter avec cet utilisateur à l’aide de la commande :

mysql -u root -p

Une fois la connexion effectuée, on va utiliser la base de donnée qui sert à la gestion de MySQL à savoir : mysql …

USE mysql;

On procède ensuite au changement de mot de passe à l’aide de la commande UPDATE :

UPDATE user SET password=PASSWORD('<NOUVEAU_MOT_DE_PASSE>') WHERE user='<NOM_DE_L_UTILISATEUR_DONT_ON_VEUT_CHANGER_LE_MDP>';

On applique ensuite les changement à l’aide de la commande :

FLUSH PRIVILEGES;

D’autres manières de faire existent dans la documentation officielle en fonction des versions/besoins.

Supprimer un utilisateur sous MySQL

Par soucis de sécurité, je créé systématiquement un utilisateur différent pour chaque base de données que je créé. Ceci me permet de limiter la casse en cas de piratage ou même d’erreur de ma part. Cela implique aussi que je dois supprimer l’utilisateur d’une base en même temps que la base en elle même puisque ce dernier ne servirait alors plus à rien.

La documentation officielle de MySQL indique que, depuis le version 4.1.1, la fonction

DROP USER <USERNAME>;

a été intégrée. Cependant, celle ci ne supprime que les utilisateurs sans droit. Pour supprimer tous les droits d’un utilisateur, il nous est dit qu’il faut utiliser la commande

REVOKE ALL PRIVILEGES, GRANT OPTION FROM <USERNAME>;

Je ne sais pas à quoi ceci peut être dû mais la commande a refuser de fonctionner pour l’utilisateur que je voulais supprimer. J’ai donc utiliser l’ancienne méthode, efficace même avec les anciennes version de MySQL, la commande :

DELETE FROM mysql.user WHERE user='<USERNAME>';

Installation d’un serveur web sous Debian

J’avais lors d’un précédent post, expliqué comment installer WordPress sur son serveur Web mais je n’avais pas expliqué comment installer ce serveur.

On partira donc du principe que l’on a besoin de mettre en place un serveur HTTP, un interpréteur PHP, un SGBD (Système de Gestion de Base de Données) et un serveur FTP. De plus pour le contrôler facilement à distance on utilisera le protocole SSH.

Tout d’abord le choix de la distribution. Ayant toujours utilisé des distributions basées sur Debian et Debian étant réputé pour sa stabilité, il m’a semblé évident de prendre cette distribution comme base. De plus les installations sont facilitées grâce à des dépôts bien remplis (pas toujours à jour, mais fournis).

Ainsi, après une installation standard de cette distribution, enfin, en tout cas sans gestionnaire de fenêtre vu que c’est pour un serveur, nous allons passer à la phase d’installation.

Les logiciels que j’ai choisis d’utiliser pour combler tous nos besoins sont :

  • Serveur HTTP : Apache
  • Serveur FTP : vsFTPd
  • Serveur SSH : openSSH
  • interpréteur PHP : PHP5
  • SGBD : MySQL

Nous allons commencer par installer openSSH afin de pouvoir administrer le serveur à distance par la suite à l’aide de la commande :

apt-get install ssh

Nous verrons les configurations à apporter à chaque logiciel par la suite. Installons maintenant le serveur Apache à l’aide de la commande :

apt-get install apache2

Puis PHP et son module pour apache en tapant :

apt-get install php5 libapache2-mod-php5

Pour MySQL, Debian se charge normalement tout seul de récupérer les paquets qui permettent les interactions avec PHP. Dans le cas contraire il faudra les rajouter en plus (paquet php5-mysql). On tapera donc :

apt-get install mysql-server

Un mot de passe root est demandé à ce moment là. Bien penser à en mettre un fort.

Nous allons enfin installer vsFTPd en tapant :

apt-get install vsftpd

Maintenant que tous les logiciels dont nous avons besoin sont installés, il va nous falloir les configurer. Toujours garder en tête cependant que les configurations sont la partie la plus personnelle de ce genre de mise en place car elles dépendent principalement de ce que l’on désire faire. Je ne détaillerais pas les configurations d’SSH car j’ai déjà mis un exemple détaillé dans ce post ci.

Commençons donc avec la configuration d’Apache. Un fichier de configuration extrêmement important est le fichier /etc/apache2/conf.d/security. C’est ce fichier qui déterminera le niveau de détail des messages d’erreur. Pour un serveur en production, afin d’éviter toute fuite d’information sensible en cas de faille, on mettra les lignes :

ServerTokens Prod
ServerSignature Off
TraceEnable Off

Pour un serveur de développement, le but étant d’obtenir un maximum d’informations, on mettra :

ServerTokens Full
ServerSignature On
TraceEnable Extended

La configuration de base d’Apache donne le dossier /var/www/ comme dossier du site principal. On peut héberger plusieurs sites sur un seul serveur en rajoutant des fichiers de configuration dans le dossier /etc/apache2/sites-available/ (De manière globale, tout fichier présent dans ce dossier est inclus dans le fichier de configuration au lancement d’Apache). Une configuration minimale de site possible est :

<VirtualHost <ADRESSE_DU_SERVEUR>:<PORT_DE_CONNEXION>>
ServerName <NOM_DU_SERVEUR>
ServerAdmin <ADRESSE_DU_WEBMASTER>

DocumentRoot <DOSSIER_DU_SITE>
<Directory <DOSSIER_DU_SITE>>
Options -Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>

CustomLog <URI_DU_FICHIER_DE_LOG> combined
LogLevel warn
</VirtualHost>

Pour plus de détail on peut aller sur la documentation officielle d’Apache sans oublier les conseils sur la sécurité. On pourra, selon la distinction que l’on voudra faire entre les différents sites web (différentes adresses IP, différents ports de connexion), utiliser cette page de documentation ou celle ci pour choisir ses options.
Vous remarquerez le -Indexes qui permet de ne pas lister le contenu d’un dossier lorsque le fichier index.html ou index.php n’existe pas. Pour d’autres options de sécurités on peut aller voir par là.

Il ne reste alors plus qu’à activer le site nouvellement configuré à l’aide de la commande

a2ensite <NOM_DU_FICHIER_DE_CONFIGURATION>

et à redémarrer apache (nous ferons ceci à la fin).

En ce qui concerne PHP, je ne rentrerais pas dans les détails de la configuration car ils sont beaucoup trop dépendants de ce que l’on souhaite mettre en place. De plus, ceux de base conviendront la plupart du temps.

La configuration de MySQL étant plus une configuration par base de données que dans sa globalité, les paramètres originaux feront largement l’affaire. Cependant, il ne faudra pas oublier de créer un nouvel utilisateur pour chaque base afin d’améliorer la sécurité et de ne pas laisser traîner le mot de passe root quelque part. J’avais détaillé le script de création dans mon post sur la mise en place de mon blog.

Il nous reste enfin à configurer vsFTPd. Mon choix s’est porté sur ce logiciel plutôt que sur ProFTP, qui est le plus souvent cité lorsque l’on cherche un serveur FTP, car, notamment, il a été conçu en étant orienté sécurité. Le fichier de configuration est /etc/vsftpd.conf. Il est bien détaillé et facile à paramétrer. On peut choisir de chrooter les utilisateurs, utiliser le serveur en IPv4/IPv6, autoriser l’accès anonyme, etc … J’ai détaillé une des configuration que j’utilise sur l’un de mes serveurs dans ce post.

Il suffit ensuite soit de redémarrer la machine (le plus simple), soit de redémarrer tous les services, après configuration. On peut les relancer un par un à l’aide des commandes :

/etc/init.d/apache restart
/etc/init.d/ssh restart
/etc/init.d/vsftpd restart

On a alors un serveur HTTP/FTP/MySQL/SSH prêt à être utilisé.

Configuration et mise en place de WordPress

Voici un petit article uniquement consacré à WordPress puisque j’ai décidé de l’héberger moi même désormais.

Après pas mal de temps à chercher quels étaient les droits à donner aux différents dossiers pour que WordPress cesse de m’afficher des erreurs de permissions dès qu’il essaye de faire quelque chose, je me suis rendu compte qu’il suffisait d’attribuer www-data comme utilisateur et groupe pour que tout fonctionne. En réalité, j’ai fait un wget pour récupérer la dernière version directement sur le serveur et je l’ai décompressée (tar -xzf latest.tar.gz). Il s’est chargé de conserver les droits.

En ce qui concerne la base de donnée MySql, je voulais créer un utilisateur de blog qui aurait la possibilité de gérer toute la base sans pouvoir toucher aux autres.
J’ai donc fait :

CREATE DATABASE <NOM_DE_LA_BASE>;
GRANT ALL PRIVILEGES ON `<NOM_DE_LA_BASE>`.* TO '<LOGIN>'@'localhost' IDENTIFIED BY '<MOT_DE_PASSE>';

J’obtiens ainsi un utilisateur qui a un accès total à la base de donnée de WordPress, qui ne peut se connecter qu’en local et qui ne peut pas toucher à mes autres BDD.

Pour ce qui est de la réécriture des liens afin d’avoir des permalinks facilement lisibles, j’ai dû activer le module rewrite d’apache en tapant la commande :

a2enmod rewrite

Il m’a fallut ensuite modifier dans /etc/apache2/site-available le fichier default en remplaçant dans la sous-catégorie correspondante à mon site (en l’occurrence <Directory /var/www>) « AllowOverride None » par «  »AllowOverride All ».

Il ne me reste alors plus qu’à configurer le CMS depuis l’interface d’installation disponible depuis l’adresse du site.