Cet article décrit l’installation du moteur de blog WordPress sur un serveur dédié tournant sous CentOS 7. WordPress est le CMS (Content Management System) ou SGC (Système de Gestion de Contenu) le plus utilisé au monde. Actuellement, près d’un tiers des sites web dans le monde utilisent WordPress d’après les statistiques de W3Techs.com. Microlinux utilise WordPress aussi bien pour son site web que pour ce blog technique.
Au vu de sa popularité, WordPress constitue une cible de prédilection des attaques malveillantes. On ne compte plus les administrateurs qui pleurent dans les forums parce qu’ils se sont fait défigurer leur installation WordPress ou que celle-ci a complètement disparu des radars. Nous apporterons donc un soin particulier à sécuriser notre installation dès le départ.
- Prérequis
- Configuration de SELinux
- Installation
- Configurer les permaliens personnalisés
- Gérer les extensions
- Mises à jour automatiques et permissions
Prérequis
- un serveur dédié sous CentOS 7
- un domaine valide, par exemple
blog.slackbox.fr
- un serveur LAMP fonctionnel
Configuration de SELinux
Étant donné que nous installons WordPress en-dessous de /var/www
, tous les fichiers nouvellement créés seront correctement étiquetés httpd_sys_content_t
. Rien à signaler de ce côté-là.
WordPress doit pouvoir envoyer des mails via Postfix, ce qu’il faut explicitement autoriser.
$ sudo setsebool -P httpd_can_sendmail on
Apache possède les droits d’écriture sur le répertoire wp-content
ainsi que sur les fichiers wp-config.php
ou .htaccess
. Ces droits d’écriture seront définis par le biais des permissions Unix classiques, mais il faut également le spécifier du côté de SELinux.
$ sudo setsebool -P httpd_unified on
Installation
Créer la base de données.
$ mysql -u root -p Enter password: ******** Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 5 Server version: 5.5.52-MariaDB MariaDB Server MariaDB [(none)]> create database `slackbox-wordpress`; Query OK, 1 row affected (0.02 sec) MariaDB [(none)]> grant all on `slackbox-wordpress`.* -> to slackboxuser@localhost -> identified by '********'; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> flush privileges; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> quit; Bye
Créer un répertoire de téléchargement en un endroit approprié et récupérer WordPress sur le site de l’éditeur.
$ mkdir -pv ~/webapps/wordpress mkdir: created directory ‘/home/microlinux/webapps’ mkdir: created directory ‘/home/microlinux/webapps/wordpress’ $ cd ~/webapps/wordpress/ $ links fr.wordpress.org
Suivre les liens Obtenir WordPress > Téléchargement .tar.gz. Télécharger l’application et quitter Links.
L’hôte virtuel se situera dans /var/www/slackbox-blog/html
. Créer le répertoire parent avec les permissions qui vont bien, décompresser l’archive téléchargée à l’intérieur de ce répertoire et renommer le répertoire wordpress
résultant en html
.
$ cd /var/www/ $ sudo mkdir slackbox-blog $ sudo chown microlinux:microlinux slackbox-blog/ $ cd slackbox-blog/ $ tar -xzf ~/webapps/wordpress/wordpress-5.3.2-fr_FR.tar.gz $ ls wordpress $ mv wordpress/ html
Définir des droits d’accès sains par défaut. Pour les permissions, nous suivons les recommandations officielles adaptées à notre installation.
$ cd /var/www/ $ find slackbox-blog/ -type d -exec chmod 0755 {} \; $ find slackbox-blog/ -type f -exec chmod 0644 {} \;
Permettre à WordPress de gérer wp-content
.
$ cd slackbox-blog/html $ sudo chown -R microlinux:apache wp-content/ $ find wp-content/ -type d -exec chmod 0775 {} \; $ find wp-content/ -type f -exec chmod 0664 {} \;
À partir de là, on peut ouvrir l’URL du blog avec un navigateur.
Renseigner le nom de la base MySQL (slackbox-wordpress
) et l’utilisateur associé (slackboxuser
). Attention, le mot de passe MySQL s’affiche en clair dans l’interface.
Étant donné que nous avons défini des droits d’accès assez restrictifs, WordPress ne peut pas créer le fichier wp-config.php
. Nous devons donc le faire à sa place, en définissant les permissions qui vont bien, et en effectuant un copier/coller du contenu affiché dans l’interface d’installation.
$ cd /var/www/slackbox-blog/html
$ vim wp-config.php (copier/coller le contenu affiché)
$ sudo chown microlinux:apache wp-config.php
$ chmod 0660 wp-config.php
La prochaine étape nous permet de renseigner le titre du site et de définir un administrateur pour le blog avant de finaliser l’installation.
À présent, on peut se connecter au Tableau de bord.
Le Tableau de bord dans sa configuration par défaut.
Et voici notre blog flambant neuf avec le thème par défaut.
Configurer les permaliens personnalisés
Dans sa configuration par défaut, WordPress utilise un format de liens du style https://blog.slackbox.fr/?p=123
. On va préférer un format du genre https://blog.slackbox.fr/exemple-article/
. Dans le Tableau de bord, aller dans Réglages > Permaliens et sélectionner Titre de la publication.
Le problème, c’est qu’à partir de là, les pages ne s’affichent plus.
Après avoir jeté un oeil sur l’utilisation des permaliens dans la documentation officielle, nous allons effectuer quelques modifications à la configuration d’Apache.
Nous avons désactivé l’option FollowSymlinks
dans les directives globales. Nous devons donc la réactiver explicitement pour notre hôte virtuel. Quant à l’option AllowOverride
, elle détermine ce que l’on peut mettre dans le fichier .htaccess
.
# https://blog.slackbox.fr <VirtualHost _default_:443> ServerAdmin info@microlinux.fr DocumentRoot "/var/www/slackbox-blog/html" <Directory "/var/www/slackbox-blog/html"> Options +FollowSymlinks AllowOverride All </Directory> ServerName blog.slackbox.fr:443 SSLEngine on ...
Prendre en compte les modifications.
$ sudo systemctl reload httpd
À partir de là, l’interface de configuration des permaliens nous affiche un avertissement quant à la création du fichier .htaccess
.
La solution consiste ici à créer un fichier vide .htaccess
à la racine de notre installation et d’autoriser le serveur à écrire dedans.
$ cd /var/www/slackbox-blog/html/ $ touch .htaccess $ sudo chown microlinux:apache .htaccess $ chmod 0660 .htaccess
Si nous revenons maintenant dans l’interface de configuration des permaliens, nous nous apercevons que WordPress a effectivement écrit dans le fichier.
$ cat .htaccess # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress
Dorénavant, les pages s’affichent correctement avec les permaliens personnalisés.
Gérer les extensions
WordPress permet la gestion des extensions dans le tableau de bord. Pour cela, il suffit d’éditer wp-config.php
et d’ajouter la directive FS_METHOD
à la fin du fichier.
/** Réglage des variables de WordPress et de ses fichiers inclus. */ require_once(ABSPATH . 'wp-settings.php'); /** Gérer les plugins et les mises à jour */ define('FS_METHOD','direct');
À partir de là, il suffit d’un simple clic pour installer une extension.
Mises à jour automatiques et permissions
Les droits d’accès aux fichiers et aux répertoires recommandés par la documentation officielle peuvent poser des problèmes pour les mises à jour automatiques, qui affichent un avertissement relatif aux droits d’écriture manquants.
La gestion sécurisée des mises à jour de WordPress fera l’objet du prochain article.
La rédaction de cette documentation demande du temps et des quantités significatives de café espresso. Vous appréciez ce blog ? Offrez un café au rédacteur en cliquant sur la tasse.
1 commentaire
Check414 · 20 mars 2020 à 18 h 04 min
Hello, c’est dommage d’utiliser un .htaccess dans les cas ou la modification de la conf httpd est possible (question de performance)
Les commentaires sont fermés.