WordPress – Installation du serveur

WordPress est un CMS (Content Management System) Open Source sous licence GPLv2 écrit en PHP et reposant sur un système de gestion de bases de données MySQL. Il est distribué par la société américaine Automattic depuis 2003 (version 0.70) et permet la création de sites Web, blogs, sites d’e-commerce ou de portfolios. Il peut être auto-hébergé ou être mis en place via les sites WordPress.org ou WordPress.com.
Ses versions majeures portent le nom de célébrités du Jazz comme la version 1.0 nommée Miles (pour Miles Davis) ou la version 4.9 nommée Tipton (pour Billy Tipton).
WordPress représente aujourd’hui près de 30% de l’ensemble des sites Web à travers le monde (Joomla 3%, Drupal 2%, sans CMS 55%) et près de 60% des sites créés via un CMS (Joomla 7%, Drupal 5%, Magento 3%, Blogger 2%).
 
Comparatif WordPress 0.7.0 et WordPress 4.9.6 :

 

Objectif

 

L’objectif de cet article est l’installation et la configuration d’un serveur auto-hébergé WordPress en version 4.9.6 sur une distribution Linux Debian Stretch 9.4 64bits.

 

Schéma logique

 

 

Pré-requis

 

1. Pré-requis avant réalisation

  • Un serveur Debian Stretch 9.4 64 bits fonctionnel (installation basique avec utilitaires usuels du système et service SSH)
  • Packages de base supplémentaires : resolvconf, tree, dnsutils
  • Domaine utilisé : opensharing.priv

 

2. Configuration réseau initiale

Serveur WordPress
FQDN wp-test.opensharing.priv
Adresse IP 192.168.1.14
Réseau 192.168.1.0/24
Passerelle 192.168.1.1
dns-nameservers 192.168.1.11 192.168.1.12
dns-search opensharing.priv

 

Contenu initial du fichier /etc/network/interfaces :

auto lo
iface lo inet loopback

allow-hotplug enp0s3
iface enp0s3 inet static
	address 192.168.1.14
	netmask 255.255.255.0
	network 192.168.1.0
	broadcast 192.168.1.255
	gateway 192.168.1.1
	dns-search opensharing.priv
	dns-nameservers 192.168.1.11 192.168.1.12

 
Contenu initial du fichier /etc/hosts :

127.0.0.1	localhost.localdomain           localhost
192.168.1.14	wp-test.opensharing.priv        wp-test
192.168.1.14	www.opensharing.priv            www

Rmq : L’adresse 127.0.1.1 doit être retirée sur un serveur à IP fixe et remplacée par cette dernière, tel que l’exemple ci-dessus.
 
Contenu initial du fichier /etc/host.conf :

order hosts, bind
multi on

 
Contenu initial du fichier /etc/resolv.conf :

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 192.168.1.11
nameserver 192.168.1.12
search opensharing.priv

Rmq :
Le fichier /etc/resolv.conf ne doit pas être édité dès lors que le paquet resolvconf a été installé.

Pour prendre en compte les modifications des fichiers de configuration relatifs au réseau, redémarrage du service réseau :

# systemctl restart networking
# ifup enp0s3

 

Optionnel : Création d’un alias global reprenant la commande ifconfig disparue sous Debian Stretch

# nano /etc/bash.bashrc
alias ifconfig='ip addr'
# source /etc/bash.bashrc

 

Réalisation

 

1. Installation de Apache

# apt install apache2 apache2-doc

Installe les paquets suivants par dépendances :

apache2 apache2-bin apache2-data apache2-doc
apache2-utils libapr1 libaprutil1 libaprutil1-dbd-sqlite3
libaprutil1-ldap ssl-cert

 

2. Installation de MariaDB

# apt install mariadb-server mariadb-client

Installe les paquets suivants par dépendances :

galera-3 gawk libcgi-fast-perl libcgi-pm-perl
libdbd-mysql-perl libdbi-perl libfcgi-perl libhtml-template-perl
libsigsegv2 libterm-readkey-perl mariadb-client mariadb-client-10.1
mariadb-server mariadb-server-10.1 psmisc rsync

 

3. Installation de PHP

# apt install php php-mysql php-imagick

Installe les paquets suivants par dépendances :

gawk php php-common php-imagick
php-mysql php7.0 php7.0-cli php7.0-common
php7.0-json php7.0-mysql php7.0-opcache php7.0-readline
ttf-dejavu-core

 

Configuration du moteur de cache Opcache permettant le stockage en mémoire des scripts PHP précompilés pour un gain de performance :

# nano /etc/php/7.0/mods-available/opcache.ini

Ajouter les lignes suivantes en fin de fichier :

opcache.memory_consumption=512
opcache.revalidate_freq=60
opcache.validate_timestamps=1
opcache.max_accelerated_files=5000

 

4. Installation de phpMyAdmin

# apt install phpmyadmin

Choisir le serveur web à reconfigurer automatiquement, dans notre cas apache2.

Faut-il configurer la base de données de phpmyadmin avec dbconfig-common ? Non
Nous allons le faire manuellement plus loin.

Installe les paquets suivants par dépendances :

dbconfig-common dbconfig-mysql libcurl3 libjs-sphinxdoc
php-bz2 php-curl php-gd php-mbstring
php-pear php-php-gettext php-phpseclib php-tcpdf
php-xml php-zip php7.0-bz2 php7.0-curl
php7.0-gd php7.0-mbstring php7.0-xml php7.0-zip
phpmyadmin

 

5. Configuration de MariaDB

On peut, pour le moment, se loguer sans mot de passe (la touche entrée sur une chaîne vide suffit). C’est donc la première chose à corriger.

# mysql -u root -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 10
Server version: 10.1.26-MariaDB-0+deb9u1 Debian 9.1

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

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

MariaDB [(none)]> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [mysql]> update user set plugin='mysql_native_password' where user='root';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

MariaDB [mysql]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

MariaDB [mysql]> quit;
Bye

Il faut maintenant définir un mot de passe pour root et corriger quelques paramètres de sécurité par défaut.

# mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none): 
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] Y
New password: 
Re-enter new password: 
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] Y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] Y
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] Y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] Y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

Maintenant connectons-nous avec le mot de passe root système et créons la base de données qui accueillera WordPress.

# mysql -u root -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 10
Server version: 10.1.26-MariaDB-0+deb9u1 Debian 9.1

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

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

MariaDB [(none)]> CREATE DATABASE IF NOT EXISTS wordpressdb;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> CREATE USER wpadmin@localhost IDENTIFIED BY "wpadminpw";
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON wordpressdb.* TO wpadmin@localhost;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| wordpressdb        |
+--------------------+
4 rows in set (0.00 sec)

MariaDB [(none)]> quit;
Bye

 

6. Installation de WordPress

# mkdir /root/downloads/
# cd /root/downloads/
# wget https://fr.wordpress.org/wordpress-4.9.6-fr_FR.tar.gz
# tar zxvf wordpress-4.9.6-fr_FR.tar.gz -C /var/www/
# mkdir /var/www/wordpress/wp-content/uploads/
# chown -R www-data:www-data /var/www/wordpress/
# cp -a /var/www/wordpress/wp-config-sample.php /var/www/wordpress/wp-config.php
# nano /var/www/wordpress/wp-config.php
/** Nom de la base de données de WordPress. */
define('DB_NAME', 'wordpressdb');
/** Utilisateur de la base de données MySQL. */
define('DB_USER', 'wpadmin');
/** Mot de passe de la base de données MySQL. */
define('DB_PASSWORD', 'wpadminpw');
...
/**
 * Préfixe de base de données pour les tables de WordPress.
 *
 * Vous pouvez installer plusieurs WordPress sur une seule base de données
 * si vous leur donnez chacune un préfixe unique.
 * N’utilisez que des chiffres, des lettres non-accentuées, et des caractères soulignés !
 */
$table_prefix = 'wpos_'

Rmq : Le prefixe est à personnaliser, à la place de wp_, par simple sécurité pour éviter les codes automatisés d’injections SQL.
 

7. Configuration de Apache

Rmq : La modification ou la création d’un fichier .htaccess doit se faire uniquement si l’on n’a pas accès à la configuration Apache des VirtualHosts (dans le cas d’un hébergement de site où nos droits d’accès sont restreints à la racine du site par exemple), ou alors pour des tests, mais elle est à proscrire autant que faire se peu en production. Les mêmes règles définies dans un .htaccess peuvent être écrites dans la configuration d’un VirtualHost dans le Directory correspondant.
 

# nano /var/www/wordpress/.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
# a2enmod rewrite
# nano /etc/apache2/sites-available/000-default.conf
<VirtualHost *:80>
ServerAdmin admin@opensharing.priv
    <Directory /var/www/wordpress/>
        Require all granted
        AllowOverride All
   </Directory>
    DocumentRoot /var/www/wordpress/
    ServerName www.opensharing.priv
        ErrorLog /var/log/apache2/wordpress.error.log
        CustomLog /var/log/apache2/access.log combined
</VirtualHost>
# service apache2 restart
# service mysql restart

 

8. Configuration de WordPress par le navigateur Web

Saisir, dans la barre d’adresses, l’adresse suivante :

http://wp-test.opensharing.priv

redirigeant automatiquement vers :
http://wp-test.opensharing.priv/wp-admin/install.php
ou

http://www.opensharing.priv

redirigeant automatiquement vers :
http://www.opensharing.priv/wp-admin/install.php
Si le CNAME www.opensharing.priv pour wp-test.opensharing.priv est enregistré sur le DNS primaire.
 
Le formulaire proposé est tout ce qu’il y a de plus simple et succinct.



Après quelques secondes, le Tableau de bord de l’administrateur de WordPress (en version 4.9.6), précédemment défini, apparait.

Si l’on se déconnecte et accède à l’URL www.opensharing.priv, notre site s’affiche avec le thème Twenty Seventeen, activé par défaut.

Pour accéder à nouveau au Tableau de bord de l’administrateur, saisir l’URL suivant :

http://www.opensharing.priv/wp-login.php


Sécurisation du dossier wordpress :

# find /var/www/wordpress/ -type f -print0 | xargs -0 chmod 0644
# find /var/www/wordpress/ -type d -print0 | xargs -0 chmod 0755
# find /var/www/wordpress/wp-content/ -type d -print0 | xargs -0 chmod 0775
# chown -R root:root /var/www/wordpress/
# chown -R www-data:www-data /var/www/wordpress/wp-content/
# chown root:www-data /var/www/wordpress/.htaccess
# systemctl restart apache2
# systemctl restart mysql

 

Pour aller plus loin

 

1. Arborescence initiale des fichiers Web

# tree -L 1 /var/www/wordpress/
/var/www/wordpress/
├── index.php
├── license.txt
├── readme.html
├── wp-activate.php
├── wp-admin/
├── wp-blog-header.php
├── wp-comments-post.php
├── wp-config-sample.php
├── wp-content/
├── wp-cron.php
├── wp-includes/
├── wp-links-opml.php
├── wp-load.php
├── wp-login.php
├── wp-mail.php
├── wp-settings.php
├── wp-signup.php
├── wp-trackback.php
└── xmlrpc.php

Pour une description de ces fichiers : WordPress.org – Codex
 

2. Arborescence initiale des fichiers de bases de données

Les fichiers de bases de données sont stockés dans /var/lib/mysql/dbname/.
Chaque table de la base de données wordpressdb est représentée par 3 fichiers :

  • prefix_tablename.frm : description du format de la table (définition de la table)
  • prefix_tablename.idb : (fichier InnoDB) données et index de la table
# tree /var/lib/mysql/wordpressdb/
/var/lib/mysql/wordpressdb/
├── db.opt
├── wpos_commentmeta.frm
├── wpos_commentmeta.ibd
├── wpos_comments.frm
├── wpos_comments.ibd
├── wpos_links.frm
├── wpos_links.ibd
├── wpos_options.frm
├── wpos_options.ibd
├── wpos_postmeta.frm
├── wpos_postmeta.ibd
├── wpos_posts.frm
├── wpos_posts.ibd
├── wpos_termmeta.frm
├── wpos_termmeta.ibd
├── wpos_term_relationships.frm
├── wpos_term_relationships.ibd
├── wpos_terms.frm
├── wpos_terms.ibd
├── wpos_term_taxonomy.frm
├── wpos_term_taxonomy.ibd
├── wpos_usermeta.frm
├── wpos_usermeta.ibd
├── wpos_users.frm
└── wpos_users.ibd

Le fichier db.opt est un simple fichier texte correspondant aux préférences de langue :

# cat db.opt 
default-character-set=utf8mb4
default-collation=utf8mb4_general_ci

 

3. Erreur 404 lors du changement de permaliens

Lorsque l’on change les règles de permaliens de la configuration par défaut :

http://www.opensharing.priv/?p=123

vers n’importe quelle autre configuration, on obtient une erreur 404 de page non trouvée.

Pour corriger ce problème, éditer la page de configuration générale de Apache :

# nano /etc/apache2/apache2.conf
<Directory /var/www/>
...
AllowOverride All
...
</Directory>

Sans cette modification, le fichier /var/www/wordpress/.htaccess sera occulté et les réécritures de liens ne fonctionneront pas.
 
Rmq : La modification ou la création d’un fichier .htaccess doit se faire uniquement si l’on n’a pas accès à la configuration Apache des VirtualHosts (dans le cas d’un hébergement de site où nos droits d’accès sont restreints à la racine du site par exemple), ou alors pour des tests, mais elle est à proscrire autant que faire se peu en production. Les mêmes règles définies dans un .htaccess peuvent être écrites dans la configuration d’un VirtualHost dans le Directory correspondant.
 

4. Restreindre l’accès à la page d’authentification par adresse IP

Si l’on veut, par exemple, que seule l’adresse IP 192.168.0.10 puisse accéder à wp-login.php, c’est à dire la page d’authentification, modifier le fichier /var/www/wordpress/.htaccess

# nano /var/www/wordpress/.htaccess

Et ajouter les lignes suivantes :

# BEGIN WordPress
...
<Files wp-login.php>
order deny,allow
allow from 192.168.0.10
deny from all
</Files>
# END WordPress

 
Rmq : La modification ou la création d’un fichier .htaccess doit se faire uniquement si l’on n’a pas accès à la configuration Apache des VirtualHosts (dans le cas d’un hébergement de site où nos droits d’accès sont restreints à la racine du site par exemple), ou alors pour des tests, mais elle est à proscrire autant que faire se peu en production. Les mêmes règles définies dans un .htaccess peuvent être écrites dans la configuration d’un VirtualHost dans le Directory correspondant.
 

5. Restreindre l’accès aux pages d’administration par adresse IP

# nano /var/www/wordpress/wp-admin/.htaccess
Order deny,allow
Allow from 192.168.0.10
Deny from all

 
Rmq : La modification ou la création d’un fichier .htaccess doit se faire uniquement si l’on n’a pas accès à la configuration Apache des VirtualHosts (dans le cas d’un hébergement de site où nos droits d’accès sont restreints à la racine du site par exemple), ou alors pour des tests, mais elle est à proscrire autant que faire se peu en production. Les mêmes règles définies dans un .htaccess peuvent être écrites dans la configuration d’un VirtualHost dans le Directory correspondant.
 

6. Modifier la taille des fichiers uploadables

Par défaut, cette taille est fixée à 8Mo.
Pour la modifier :

# nano /etc/php/7.0/apache2/php.ini

Modifier le paramètre suivant :

upload_max_filesize = 64M

La taille maximum des fichiers uploadables passe à 64Mo.
Pour la taille d’un article :

post_max_size = 0

Une taille de 0 désactive la limite de taille d’un article fixée à 8Mo par défaut.
 

7. Modifier la traduction de WordPress ou d’un thème particulier

Deux fichiers sont importants : un fichier .po et un fichier .mo

  • Le fichier .po est la version texte de la traduction
  • Le fichier .mo est la version compilée du fichier .po

Modifier le fichier .po ne suffit donc pas, il faut générer le fichier .mo à partir du fichier .po modifié
Pour cela, il faut utiliser le logiciel Poedit
Par exemple, pour modifier le fichier de traduction française de WordPress, il faut télécharger le fichier suivant :

/var/www/wordpress/wp-content/languages/fr_FR.po

Ensuite le modifier avec Poedit, puis sauvegarder sous le nom fr_FR.po (renommer l’original avant modification pour éviter le conflit d’écrasement).
Ceci générera les 2 fichiers mentionnés : fr_FR.po et fr_FR.mo
Il suffit ensuite de placer ces 2 fichiers dans :

/var/www/wordpress/wp-content/languages/

En écrasant les originaux (sauvegardés par sécurité, au préalable)
Pour modifier la traduction d’un thème, la procédure est la même, seule la localisation des fichiers .po et .mo diffère.
Toutefois, si le thème ne possède qu’un fichier .pot, il sera nécessaire de l’ouvrir en tant que fichier .pot sous Poedit puis de générer les fichiers .po et .mo
Cependant, en cas de mise à jour de WordPress ou du thème actif, les traductions seront écrasées, c’est pourquoi il faut travailler sur un thème enfant.
 

8. Limiter le nombre de révisions par article

Ceci permet de réduire sensiblement la taille de la base de données.
Pour cela, ajouter la ligne suivante dans le fichier /var/www/wordpress/wp-config.php

define('WP_POST_REVISIONS', 3);

Le nombre de révisions maximum passe à 3. Les nouvelles révisions remplacent les anciennes.
Il faut savoir qu’une des révisions sera la sauvegarde automatique, donc il y aura 3 révisions en cliquant sur Publier et 1 sauvegarde automatique, soit 4 révisions potentielles au total.

Les révisions et la sauvegarde automatique sont deux choses différentes. Toutefois, la sauvegarde automatique apparait sous forme d’une révision comme les autres. Désactiver les révisions ne désactive pas la sauvegarde automatique.
 

9. Désactiver les révisions des articles

Pour cela, ajouter la ligne suivante dans le fichier /var/www/wordpress/wp-config.php.

define('WP_POST_REVISIONS', false);

Ceci supprime totalement la possibilité de restaurer une version précédente d’un article.
Les révisions et la sauvegarde automatique sont deux choses différentes. Toutefois, la sauvegarde automatique apparait sous forme d’une révision comme les autres. Désactiver les révisions ne désactive pas la sauvegarde automatique.
 

10. Définir un intervalle de récupération automatique des articles

Ceci permet, à l’instar de Word ou Excel, de définir un temps au bout duquel une version de l’article en cours de rédaction est automatiquement sauvegardée.

Pour cela, ajouter la ligne suivante dans le fichier /var/www/wordpress/wp-config.php.

define('AUTOSAVE_INTERVAL', 300);

Ici 300 secondes, soit 5 minutes.
Cet intervalle est de 60 secondes par défaut.
Les révisions et la sauvegarde automatique sont deux choses différentes. Toutefois, la sauvegarde automatique apparait sous forme d’une révision comme les autres. Désactiver les révisions ne désactive pas la sauvegarde automatique.
 

11. Désactiver la fonction de récupération automatique des articles

Le plus simple est de définir un intervalle important, par exemple 86400 secondes, soit un jour.
Pour cela, ajouter la ligne suivante dans le fichier /var/www/wordpress/wp-config.php.

define('AUTOSAVE_INTERVAL', 86400);

 

12. Vider la base de données des différentes révisions d’articles

Vérifier le nombre de révisions occupant la base de données :

mysql> SELECT * FROM wpos_posts WHERE post_type='revision';

(le suffixe dépend de la base de données)
Pour supprimer les différentes révisions :

mysql> DELETE FROM wpos_posts WHERE post_type='revision';

 

13. Effectuer une sauvegarde manuelle complète

# mkdir /home/adminsys/backup/4.9.6/
# cd /home/adminsys/backup/4.9.6/
# tar -czvf backup-wordpress-20170531.tar.gz -C /var/www/ wordpress/
# mysqldump --user=wpadmin --password=wpadminpw --databases wordpressdb > wordpress-20180531.sql

 

14. Effectuer une restauration manuelle complète

# cd /home/adminsys/backup/4.9.6/
# tar -xzvf backup-wordpress-20180531.tar.gz -C /var/www/
# mysql --user=wpadmin --password=wpadminpw wordpressdb < wordpress-20180531.sql

 

15. Cas d’une migration de site

Dans le cas d’une migration de domaine ou de serveur, si l’URL change alors il faut modifier toutes les occurrences relatives à l’ancien URL dans la base de données. Pour cela utiliser le programme Search-Replace-DB.
Très simple d’utilisation, il suffit de le dézipper à la racine du site.

# unzip Search-Replace-DB-master.zip -d /var/www/wordpress/
Archive:  Search-Replace-DB-master.zip
c8dfccb7bf179cb7063a0622cc2a592141411ff3
   creating: /var/www/wordpress/Search-Replace-DB-master/
  inflating: /var/www/wordpress/Search-Replace-DB-master/README.md  
  inflating: /var/www/wordpress/Search-Replace-DB-master/composer.json  
  inflating: /var/www/wordpress/Search-Replace-DB-master/index.php  
  inflating: /var/www/wordpress/Search-Replace-DB-master/package.json  
   creating: /var/www/wordpress/Search-Replace-DB-master/srdb-tests/
  inflating: /var/www/wordpress/Search-Replace-DB-master/srdb-tests/DataSet.xml  
  inflating: /var/www/wordpress/Search-Replace-DB-master/srdb-tests/DataSetGenerator.php  
  inflating: /var/www/wordpress/Search-Replace-DB-master/srdb-tests/SrdbTest.php  
  inflating: /var/www/wordpress/Search-Replace-DB-master/srdb-tests/charset-test.php  
  inflating: /var/www/wordpress/Search-Replace-DB-master/srdb-tests/db.sql  
  inflating: /var/www/wordpress/Search-Replace-DB-master/srdb.class.php  
  inflating: /var/www/wordpress/Search-Replace-DB-master/srdb.cli.php

Ensuite il suffit d’ouvrir le navigateur en précisant le dossier en question :

http://wp-test.opensharing.priv/Search-Replace-DB-master/

Et de spécifier le remplacement à effectuer :

Il faut enfin supprimer le dossier copié précédemment :

# rm -rf /var/www/wordpress/Search-Replace-DB-master/

 

16. Créer un thème enfant

Nous prendrons ci-dessous l’exemple arbitraire du thème OceanWP mais la procédure est généralement identique quel que soit le thème.
Créer le dossier du thème enfant :

# mkdir /var/www/wordpress/wp-content/themes/oceanwp-child/

Déposer dans ce dossier 3 fichiers :

  • style.css : contenant la mise en forme CSS propre au thème enfant
  • functions.php : contenant les fonctions propres au thème enfant (les autres fonctions sont chargées depuis le thème parent)
  • screenshot.png : photo du thème enfant de taille 1200×900 ou de tout ratio 1.3333

Contenu minimal du fichier style.css :

/*
Theme Name: OceanWP Child
Theme URI: https://oceanwp.org/
Description: OceanWP WordPress theme example child theme.
Author: Nick
Author URI: https://oceanwp.org/
Template: oceanwp
Version: 1.0
*/

Contenu minimal du fichier functions.php générique :

<?php
add_action( 'wp_enqueue_scripts', 'theme_enqueue_styles' );
function theme_enqueue_styles() {
 wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' );
} ?>

Rmq : Dans le cas particulier du thème OceanWP, il existe même un dépôt GitHub où l’on peut trouver ces fichiers adaptés à ce thème.
Contenu minimal du fichier functions.php adapté spécifiquement :

<?php
function oceanwp_child_enqueue_parent_style() {
	$theme   = wp_get_theme( 'OceanWP' );
	$version = $theme->get( 'Version' );
	wp_enqueue_style( 'child-style', get_stylesheet_directory_uri() . '/style.css', array( 'oceanwp-style' ), $version );
}
add_action( 'wp_enqueue_scripts', 'oceanwp_child_enqueue_parent_style' ); ?>

 

17. Interdire le parcours et listing de l’arborescence du site

Modifier le fichier .htaccess situé à la racine du site et ajouter la ligne suivante en fin de fichier :

# nano /var/www/wordpress/.htaccess
# END WordPress
Options All -Indexes

 
Rmq : La modification ou la création d’un fichier .htaccess doit se faire uniquement si l’on n’a pas accès à la configuration Apache des VirtualHosts (dans le cas d’un hébergement de site où nos droits d’accès sont restreints à la racine du site par exemple), ou alors pour des tests, mais elle est à proscrire autant que faire se peu en production. Les mêmes règles définies dans un .htaccess peuvent être écrites dans la configuration d’un VirtualHost dans le Directory correspondant.
 

18. Tester la vulnérabilité du site avec WPScan

La procédure d’installation et d’utilisation de WPScan se trouve sur son site officiel ou son dépôt GitHub.
ex avec Docker :

$ docker run -it --rm -v ~/wordlists:/wordlists wpscanteam/wpscan --url http://opensharing.priv --wordlist /wordlists/crackstation.txt --username john.doe --logs /wordlists/logs.txt

Ci-dessus, on utilise un fichier crackstation.txt comportant une liste de mots de passe à tester sur le site en force brute.
Le fichier de logs logs.txt doit exister ou il sera créé au lancement de la commande.

$ docker run -it --rm wpscanteam/wpscan --url http://opensharing.fr --enumerate u --enumerate vt --enumerate vp

Ci-dessus, on teste la vulnérabilité du site, des noms d’utilisateurs, des thèmes et des plugins installés.
 

Références

Fermer le menu
%d blogueurs aiment cette page :