Logo WordPressCet article décrit l’installation du moteur de blog WordPress sur un serveur dédié tournant sous Rocky Linux 8. WordPress est le CMS (Content Management System) ou SGC (Système de Gestion de Contenu) le plus utilisé au monde. Actuellement, près de 43 % des sites web dans le monde utilisent WordPress d’après les statistiques de W3Techs.com. Le blog technique que vous êtes en train de lire utilise également WordPress sous le capot.

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

L’utilisation de SELinux en mode renforcé (Enforcing) améliore de façon significative la sécurité de notre installation WordPress, mais elle nécessite de procéder à quelques petits ajustements.

É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 :

# 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 :

# setsebool -P httpd_unified on

Enfin, le téléchargement des extensions (plugins) de WordPress nécessite également une autorisation spécifique :

# setsebool -P httpd_can_network_connect 1

AstucePour afficher la liste complète des booléens SELinux personnalisés, on pourra utiliser la commande semanage boolean -lC.

Installation

Créer la base de données :

# mysql -u root -p
Enter password: **********
Welcome to the MariaDB monitor.

MariaDB [(none)]> create database `slackbox-wordpress`;
Query OK, 1 row affected (0.001 sec)

MariaDB [(none)]> grant all on `slackbox-wordpress`.*
    -> to slackboxuser@localhost
    -> identified by '**********';
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.001 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 francophone de l’éditeur :

# mkdir -pv ~/webapps/wordpress
mkdir: created directory '/root/webapps'
mkdir: created directory '/root/webapps/wordpress'
# cd ~/webapps/wordpress/
# wget https://fr.wordpress.org/latest-fr_FR.tar.gz

L’hôte virtuel se situera dans /var/www/slackbox-blog/html. Créer le répertoire parent, 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
# mkdir slackbox-blog
# cd slackbox-blog/
# tar -xzf ~/webapps/wordpress/latest-fr_FR.tar.gz 
# ls
wordpress
# mv -v wordpress/ html
renamed '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/
# chown -R nobody:nobody slackbox-blog/
# 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
# chown -R nobody: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 dans un navigateur :

WordPress

Renseignez les paramètres de connexion à la base de données :

WordPress

É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é)
# chown nobody:apache wp-config.php 
# chmod 0660 wp-config.php

WordPress

La prochaine étape nous permet de renseigner le titre du blog et de définir un administrateur avant de finaliser l’installation :

WordPress

À présent on peut se connecter au Tableau de bord :

WordPress

Le Tableau de bord dans sa configuration par défaut :

WordPress

Et voici notre blog flambant neuf avec le thème par défaut :

WordPress

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, allez dans Réglages > Permaliens et sélectionnez Titre de la publication :

WordPress permaliens

Le problème, c’est qu’à partir de là, les pages ne s’affichent plus :

WordPress permaliens

Après avoir jeté un œil 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
  ...

Prenez en compte les modifications :

# systemctl reload httpd

À partir de là, l’interface de configuration des permaliens nous affiche un avertissement quant à la création du fichier .htaccess :

WordPress permaliens

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
# chown nobody: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
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# 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 extensions */
define('FS_METHOD','direct');

À partir de là, il suffit d’un simple clic pour installer une extension :

WordPress extensions

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 de notre 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.

 


0 commentaire

Laisser un commentaire

Emplacement de l’avatar

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *