grosse relecture du Howto WordPress
This commit is contained in:
parent
076f9f5cc4
commit
ea7a9375c6
|
@ -1,35 +1,58 @@
|
||||||
---
|
---
|
||||||
categories: Wordpress saas web
|
categories: web webapp saas
|
||||||
title: Howto Wordpress
|
title: Howto WordPress
|
||||||
...
|
...
|
||||||
|
|
||||||
# W3 Total Cache
|
* Documentation : <https://wordpress.org/support/>
|
||||||
|
|
||||||
W3 Total Cache améliore les performances d'un « site/blog » propulsé par Wordpress ainsi que la rapidité du chargement des pages pour une meilleure expérience utilisateur et un meilleur référencement !
|
[WordPress](https://wordpress.org/) est une application web libre de gestion de contenu, historiquement utilisé pour faire un blog.
|
||||||
|
C'est l'application web la plus utilisée au monde avec plus de 30% des sites web qui l'utilise.
|
||||||
Pour cela W3 Total Cache met en cache différents éléments : renforcement du cache navigateur, cache des pages, des objets et des requêtes SQL. Il propose aussi différentes fonctions tel que le html/css/js minify et la gestion de CDN.
|
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
### Prérequis
|
Nous préconisons d'utiliser WordPress avec [Apache-ITK](HowtoApache) avec la gestion des droits désactivés pour faciliter les mises à jour :
|
||||||
|
|
||||||
* PHP 5.6 >=
|
~~~
|
||||||
* MySQL 5.6 >=
|
AssignUserID example example
|
||||||
* Apache avec module rewrite
|
~~~
|
||||||
|
|
||||||
### Procédure
|
Nous préconisons aussi de désactiver l'accès à `xmlrpc.php` sauf si vous en avez vraiment besoin :
|
||||||
|
|
||||||
* Télécharger l'archive du plugin sur le site de [Wordpress](http://wordpress.org/extend/plugins/w3-total-cache/) et la décompresser dans wp-content/plugins. (Ou bien installer le plugin depuis Wordpress) ;
|
~~~
|
||||||
* Activer le plugins dans la liste des extensions Wordpress ;
|
<Files "xmlrpc.php">
|
||||||
* Passer à la configuration.
|
Require all denied
|
||||||
|
</Files>
|
||||||
## Configuration
|
~~~
|
||||||
|
|
||||||
La configuration se passe dans le tableau de bord de Worpdress, dans l'onglet « Performance ».
|
|
||||||
Cliquer sur le bouton « Compatiblity Check », pour vérifier que votre serveur dispose de tous les modules nécessaire.
|
|
||||||
|
|
||||||
|
|
||||||
# Mise à jour Wordpress par l'interface web via ssh
|
Nous utilisons l'outil [WP-CLI](https://wp-cli.org/fr/) :
|
||||||
|
|
||||||
|
~~~{.bash}
|
||||||
|
$ curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
|
||||||
|
$ php wp-cli.phar --info
|
||||||
|
$ php wp-cli.phar core is-installed --path=$HOME/www
|
||||||
|
$ php wp-cli.phar core config --dbname=example --dbuser=example --dbpass=PASSWORD --dbhost=127.0.0.1 --path=$HOME/www
|
||||||
|
$ php wp-cli.phar core install --url=blog.example.com --title="TITRE" --admin_user="admin" --admin_password=PASSWORD --admin_email="blog@example.com" --skip-email --path="$HOME/www"
|
||||||
|
~~~
|
||||||
|
|
||||||
|
## Mise à jour
|
||||||
|
|
||||||
|
Les mises à jour sont très importantes car WordPress est très utilisé dans le monde, et il y a donc de nombreuses attaques sur les versions non à jour.
|
||||||
|
|
||||||
|
Par défaut, si les droits le permettent, le core de WordPress se met à jour automatiquement pour les versions mineures, cf <https://codex.wordpress.org/Configuring_Automatic_Background_Updates>
|
||||||
|
|
||||||
|
Vous pouvez faire les mises à jour directement depuis l'interface d'admin ou alors avec [WP-CLI](https://wp-cli.org/fr/) :
|
||||||
|
|
||||||
|
~~~{.bash}
|
||||||
|
$ cd $HOME/www
|
||||||
|
$ php $HOME/wp-cli/wp-cli.phar core download --force
|
||||||
|
$ php $HOME/wp-cli/wp-cli.phar core check-update
|
||||||
|
$ php $HOME/wp-cli/wp-cli.phar core update
|
||||||
|
~~~
|
||||||
|
|
||||||
|
### Mise à jour par l'interface d'admin via SSH
|
||||||
|
|
||||||
|
Si les droits ne le permettent pas, vous pouvez activer les mises à jour via l'interface d'admin avec SSH.
|
||||||
|
|
||||||
Tutoriel détaillé : <http://kbeezie.com/secure-wordpress-ssh2/>
|
Tutoriel détaillé : <http://kbeezie.com/secure-wordpress-ssh2/>
|
||||||
|
|
||||||
|
@ -63,149 +86,8 @@ Il reste plus qu'a se rendre sur le backoffice du site à la page qui liste les
|
||||||
|
|
||||||
**Wordpress 4.3 et 4.8**, la mise à jour via ssh est cassée et il faudra appliquer ce fix : <https://web.archive.org/web/20190630102647/https://www.lekernelpanique.fr/2015/09/08/wordpress-4-3-casse-la-mise-a-jour-via-sshsftp/>
|
**Wordpress 4.3 et 4.8**, la mise à jour via ssh est cassée et il faudra appliquer ce fix : <https://web.archive.org/web/20190630102647/https://www.lekernelpanique.fr/2015/09/08/wordpress-4-3-casse-la-mise-a-jour-via-sshsftp/>
|
||||||
|
|
||||||
# Mise à jour Wordpress [plugins] depuis l'interface web (éviter)
|
|
||||||
|
|
||||||
Revoir les droits du groupe pour permettre l'écriture ($HOME/www = où le wp est installé) :
|
## Administration
|
||||||
|
|
||||||
~~~
|
|
||||||
$ chmod g+w $HOME/www/ $HOME/www/wp-includes/version.php
|
|
||||||
$ chmod g+w -R $HOME/www/wp-admin/includes/ $HOME/www/wp-content/ $HOME/www/wp-content/upgrade/ $HOME/www/wp-content/languages/
|
|
||||||
|
|
||||||
~~~
|
|
||||||
Si vous avez des retours de type : 'Operation not permitted', il y a de bonne chance que le propriétaire du fichier soit déjà l'utilisateur utilisé par l'instance du serveur web (et donc les droits sont déjà suffisant).
|
|
||||||
|
|
||||||
## Définir les droits des fichiers écrit par Wordpress
|
|
||||||
|
|
||||||
Wordpress surcharge l'umask définie par Apache/PHP et écrit par défaut les fichiers et dossiers en 750.
|
|
||||||
|
|
||||||
Il faut rajouter ces 2 lignes dans wp-config.php pour avoir des droits corrects :
|
|
||||||
|
|
||||||
~~~
|
|
||||||
define( 'FS_CHMOD_DIR', ( 0770 & ~ umask() ) );
|
|
||||||
define( 'FS_CHMOD_FILE', ( 0660 & ~ umask() ) );
|
|
||||||
~~~
|
|
||||||
|
|
||||||
## Attaque sur xmlrpc.php
|
|
||||||
|
|
||||||
Sur les Wordpress pas à jour, l'API xmlrpc.php est sensible à une attaque par rebond, un attaquant réalise plein de requêtes sur xmlrpc.php et votre serveur fait des requêtes vers la/les cibles de l'attaquant.
|
|
||||||
|
|
||||||
S'il ne vous est pas possible de mettre à jour Wordpress, une solution est de bloquer les requêtes vers xmlrpc.php dans Apache :
|
|
||||||
|
|
||||||
~~~
|
|
||||||
<Files "xmlrpc.php">
|
|
||||||
Require all denied
|
|
||||||
</Files>
|
|
||||||
~~~
|
|
||||||
|
|
||||||
## Restriction sur pages d'admin
|
|
||||||
|
|
||||||
~~~
|
|
||||||
<LocationMatch "^/wp-(admin|login)">
|
|
||||||
Require ip 192.0.2.42
|
|
||||||
</LocationMatch>
|
|
||||||
~~~
|
|
||||||
|
|
||||||
# Maintenance
|
|
||||||
|
|
||||||
## Vérifier la liste des plugins installés sur Wordpress
|
|
||||||
|
|
||||||
~~~{ .sql }
|
|
||||||
> SELECT * FROM wp_options WHERE option_name = 'active_plugins';
|
|
||||||
~~~
|
|
||||||
|
|
||||||
# wp-cli
|
|
||||||
|
|
||||||
Permet d'administrer une instance Wordpress à partir de la ligne de commande.
|
|
||||||
[<http://wp-cli.org/commands/>]
|
|
||||||
|
|
||||||
## Installation
|
|
||||||
|
|
||||||
~~~{.bash}
|
|
||||||
$ curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
|
|
||||||
~~~
|
|
||||||
|
|
||||||
## core
|
|
||||||
|
|
||||||
Vérifier que le répertoire en question correspond bien à un wordpress :
|
|
||||||
|
|
||||||
~~~
|
|
||||||
php wp-cli.phar core is-installed --path=$HOME/www
|
|
||||||
~~~
|
|
||||||
|
|
||||||
### Installation de Wordpress
|
|
||||||
|
|
||||||
Configuration des différentes directives à compléter (pour la base de donnée) :
|
|
||||||
|
|
||||||
~~~
|
|
||||||
php wp-cli.phar core config --dbname=nombase --dbuser=nomutilisateur --dbpass=motdepasse \
|
|
||||||
--dbhost=hostnamedb --path=$HOME/www
|
|
||||||
|
|
||||||
~~~
|
|
||||||
Procéder à l'installation :
|
|
||||||
|
|
||||||
~~~
|
|
||||||
php wp-cli.phar core install --url="ServerName" --title="TITRE_WP" --admin_user="admin" --admin_password="motdepasseadmin" \
|
|
||||||
--admin_email="emailadmin" --skip-email --path="$HOME/www"
|
|
||||||
~~~
|
|
||||||
|
|
||||||
### Mise à jour
|
|
||||||
|
|
||||||
#### Avec wp-cli
|
|
||||||
|
|
||||||
Se placer dans le répertoire où est installé wp :
|
|
||||||
|
|
||||||
~~~
|
|
||||||
$ cd $HOME/www
|
|
||||||
~~~
|
|
||||||
|
|
||||||
Forcer le téléchargement de la dernière version (US) - non recommandé:
|
|
||||||
|
|
||||||
~~~
|
|
||||||
$ php $HOME/wp-cli/wp-cli.phar core download --force
|
|
||||||
~~~
|
|
||||||
|
|
||||||
Vérifier si maj disponible :
|
|
||||||
|
|
||||||
~~~
|
|
||||||
$ php $HOME/wp-cli/wp-cli.phar core check-update
|
|
||||||
+---------+-------------+-------------------------------------------------------------+
|
|
||||||
| version | update_type | package_url |
|
|
||||||
+---------+-------------+-------------------------------------------------------------+
|
|
||||||
| 4.6.1 | major | <https://downloads.wordpress.org/release/wordpress-4.6.1.zip> |
|
|
||||||
+---------+-------------+-------------------------------------------------------------+
|
|
||||||
~~~
|
|
||||||
|
|
||||||
Mettre à jour wordpress et la bd
|
|
||||||
|
|
||||||
~~~
|
|
||||||
$ php $HOME/wp-cli/wp-cli.phar core update
|
|
||||||
Updating to version 4.6.1 (en_US)...
|
|
||||||
Downloading update from <https://downloads.wordpress.org/release/wordpress-4.6.1-no-content.zip...>
|
|
||||||
Unpacking the update...
|
|
||||||
Cleaning up files...
|
|
||||||
No files found that need cleaned up.
|
|
||||||
Success: WordPress updated successfully.
|
|
||||||
$ php $HOME/wp-cli/wp-cli.phar core update-db
|
|
||||||
Success: WordPress database upgraded successfully from db version 36686 to 37965.
|
|
||||||
~~~
|
|
||||||
|
|
||||||
#### Mise à jour automatique
|
|
||||||
|
|
||||||
Par défaut, le core de WordPress se met à jour automatiquement pour les versions mineures, cf <https://codex.wordpress.org/Configuring_Automatic_Background_Updates>
|
|
||||||
|
|
||||||
### Redirections
|
|
||||||
|
|
||||||
Lister les redirections déjà présentes sur le WP :
|
|
||||||
|
|
||||||
~~~{.bash}
|
|
||||||
$ php $HOME/wp-cli/wp-cli.phar rewrite list --format=csv
|
|
||||||
~~~
|
|
||||||
|
|
||||||
Lister selon url donné (ex: SERVERNAME/fr_FR) :
|
|
||||||
|
|
||||||
~~~{.bash}
|
|
||||||
$ php $HOME/wp-cli/wp-cli.phar --url=SERVERNAME rewrite list --format=csv --match=fr_FR
|
|
||||||
~~~
|
|
||||||
|
|
||||||
### Utilisateurs
|
### Utilisateurs
|
||||||
|
|
||||||
|
@ -230,36 +112,36 @@ $ php $HOME/wp-cli/wp-cli.phar user delete X
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
|
|
||||||
# Sécurité
|
|
||||||
|
|
||||||
## WPScan
|
## plugins
|
||||||
|
|
||||||
WPSscan (https://wpscan.org/) est un outil de scan de vulnérabilités en boite noire dédié à WordPress. Il va détecter la version de WordPress, lister d'éventuelles vulénrabilités connues pour cette version, répertorier les thèmes et plugins utilisés avec leur failles et pointer des défauts de configuration de l'installation.
|
On peut vérifier la liste des plugins installés sur Wordpress :
|
||||||
|
|
||||||
Pour l'installer, vous pouvez suivre les instructions de [la documentation](https://github.com/wpscanteam/wpscan#install)
|
~~~{ .sql }
|
||||||
|
SELECT * FROM wp_options WHERE option_name = 'active_plugins';
|
||||||
### Utilisation
|
|
||||||
|
|
||||||
#### Mise à jour
|
|
||||||
Avant la première utilisation, et de manière régulière, il faut mettre à jour WPScan, cela lui permet de récupérer la liste des dernière vulnérabiliés. Vous pouvez le faire avec la commande suivante :
|
|
||||||
|
|
||||||
~~~
|
|
||||||
ruby wpscan.rb --update
|
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
*Note* : Si votre base de donnée locale des vulnérabilités est trop ancienne, le script vous proposera automatiquement de faire la mise à jour.
|
### W3 Total Cache
|
||||||
|
|
||||||
#### Scan d'un site
|
Le plugin W3 Total Cache améliore les performances d'un « site/blog » propulsé par Wordpress ainsi que la rapidité du chargement des pages pour une meilleure expérience utilisateur et un meilleur référencement !
|
||||||
|
|
||||||
L'opération est simple, il suffit juste de donner l'adresse du site à WPScan. Vous optiendrez alors un compte rendu complet de la situation.
|
Pour cela W3 Total Cache met en cache différents éléments : renforcement du cache navigateur, cache des pages, des objets et des requêtes SQL. Il propose aussi différentes fonctions tel que le html/css/js minify et la gestion de CDN.
|
||||||
|
|
||||||
|
La configuration se passe dans le tableau de bord de Worpdress, dans l'onglet « Performance ».
|
||||||
|
Cliquer sur le bouton « Compatiblity Check », pour vérifier que votre serveur dispose de tous les modules nécessaire.
|
||||||
|
|
||||||
|
|
||||||
|
## Sécurité
|
||||||
|
|
||||||
|
Nous préconisons de restreindre l'accès à l'interface d'admin par IP :
|
||||||
|
|
||||||
~~~
|
~~~
|
||||||
ruby wpscan.rb --url example.net
|
<LocationMatch "^/wp-(admin|login)">
|
||||||
|
Require ip 192.0.2.42
|
||||||
|
</LocationMatch>
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
## Bloquer l'exécution de PHP dans wp-contents/uploads
|
et nous préconisons aussi de bloquer l'exécution de PHP dans wp-contents/uploads (attention, cela risque de casser certains plugins « sales ») :
|
||||||
|
|
||||||
Avec Apache :
|
|
||||||
|
|
||||||
~~~
|
~~~
|
||||||
<Directory /home/SITE/www/wp-content/uploads/>
|
<Directory /home/SITE/www/wp-content/uploads/>
|
||||||
|
@ -269,7 +151,57 @@ Avec Apache :
|
||||||
</Directory>
|
</Directory>
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
# Erreurs
|
|
||||||
|
|
||||||
|
### WPScan
|
||||||
|
|
||||||
|
[WPSscan](https://wpscan.org/) est un outil de scan de vulnérabilités en boite noire dédié à WordPress. Il va détecter la version de WordPress, lister d'éventuelles vulénrabilités connues pour cette version, répertorier les thèmes et plugins utilisés avec leur failles et pointer des défauts de configuration de l'installation.
|
||||||
|
|
||||||
|
Pour l'installer, vous pouvez suivre les instructions de [la documentation](https://github.com/wpscanteam/wpscan#install)
|
||||||
|
|
||||||
|
Nous conseillons de l'installer sur une machine distante, et pas directement sur le serveur qui héberge WordPress.
|
||||||
|
|
||||||
|
Avant la première utilisation, et de manière régulière, il faut mettre à jour WPScan, cela lui permet de récupérer la liste des dernière vulnérabiliés. Vous pouvez le faire avec la commande suivante :
|
||||||
|
|
||||||
|
~~~
|
||||||
|
$ ruby wpscan.rb --update
|
||||||
|
~~~
|
||||||
|
|
||||||
|
Pour « scanner » un site, l'opération est simple, il suffit juste de donner l'adresse du site à WPScan. Vous optiendrez alors un compte rendu complet de la situation.
|
||||||
|
|
||||||
|
~~~
|
||||||
|
$ ruby wpscan.rb --url example.net
|
||||||
|
~~~
|
||||||
|
|
||||||
|
|
||||||
|
## FAQ
|
||||||
|
|
||||||
|
### Gestion des redirections
|
||||||
|
|
||||||
|
Lister les redirections déjà présentes :
|
||||||
|
|
||||||
|
~~~{.bash}
|
||||||
|
$ php $HOME/wp-cli/wp-cli.phar rewrite list --format=csv
|
||||||
|
~~~
|
||||||
|
|
||||||
|
Lister selon url donné (ex: SERVERNAME/fr_FR) :
|
||||||
|
|
||||||
|
~~~{.bash}
|
||||||
|
$ php $HOME/wp-cli/wp-cli.phar --url=blog.example.com rewrite list --format=csv --match=fr_FR
|
||||||
|
~~~
|
||||||
|
|
||||||
|
## Forcer les droits
|
||||||
|
|
||||||
|
Nous conseillons de désactiver la gestion des droits grâce à Apache-ITK (cf Installation).
|
||||||
|
|
||||||
|
Si vous ne faites pas cela, sachez que WordPress surcharge l'umask défini par Apache/PHP et écrit par défaut les fichiers et dossiers en 750.
|
||||||
|
|
||||||
|
Il faut rajouter ces 2 lignes dans `wp-config.php` pour avoir des droits corrects :
|
||||||
|
|
||||||
|
~~~
|
||||||
|
define( 'FS_CHMOD_DIR', ( 0770 & ~ umask() ) );
|
||||||
|
define( 'FS_CHMOD_FILE', ( 0660 & ~ umask() ) );
|
||||||
|
~~~
|
||||||
|
|
||||||
## Problème de "Live preview" sur les thèmes
|
## Problème de "Live preview" sur les thèmes
|
||||||
|
|
||||||
|
@ -310,11 +242,17 @@ POST /wp-json/wp/v2/pages/xx?_locale=user HTTP/1.1" 404
|
||||||
|
|
||||||
Cela vient probablement des permaliens. Il suffit de les mettre à jour dans la partie Réglages > permaliens du panneau d'administration en cliquant sur "Enregistrer les modifications".
|
Cela vient probablement des permaliens. Il suffit de les mettre à jour dans la partie Réglages > permaliens du panneau d'administration en cliquant sur "Enregistrer les modifications".
|
||||||
|
|
||||||
|
### WordPress multisite
|
||||||
# Divers
|
|
||||||
|
|
||||||
## Multisite
|
|
||||||
|
|
||||||
<https://codex.wordpress.org/Nginx#WordPress_Multisite_subdomains_rules>
|
<https://codex.wordpress.org/Nginx#WordPress_Multisite_subdomains_rules>
|
||||||
|
|
||||||
|
### HTTP -> HTTPS
|
||||||
|
|
||||||
|
Si l'on veut passer en HTTPS un site précédemment en HTTP, outre la configuration Apache / redirection automatique, il faut aussi remplacer
|
||||||
|
dans la configuration toutes les URLs en HTTPS. Pour faire cela, on peut faire une dump de la table `wp_options` puis faire des remplacements avec un éditeur :
|
||||||
|
|
||||||
|
~~~
|
||||||
|
$ mysqldump wp_options --no-create-db --replace --extended-insert=FALSE --where="option_value LIKE '%http:%'" > https.sql
|
||||||
|
~~~
|
||||||
|
|
||||||
|
> **Note** : Attention, gardez bien le dump original pour restaurer les lignes originales en cas de besoin
|
||||||
|
|
Loading…
Reference in a new issue