diff --git a/HowtoWordpress.md b/HowtoWordpress.md index 8aecb096..11e369c0 100644 --- a/HowtoWordpress.md +++ b/HowtoWordpress.md @@ -1,35 +1,58 @@ --- -categories: Wordpress saas web -title: Howto Wordpress +categories: web webapp saas +title: Howto WordPress ... -# W3 Total Cache +* Documentation : -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 ! - -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. +[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. ## 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 >= -* Apache avec module rewrite +~~~ +AssignUserID example example +~~~ -### 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 ; -* Passer à la configuration. - -## 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. +~~~ + +Require all denied + +~~~ -# 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 + +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é : @@ -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 : -# 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é) : - -~~~ -$ 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 : - -~~~ - -Require all denied - -~~~ - -## Restriction sur pages d'admin - -~~~ - -Require ip 192.0.2.42 - -~~~ - -# 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. -[] - -## 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 | | -+---------+-------------+-------------------------------------------------------------+ -~~~ - -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 -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 - -### 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 -~~~ +## Administration ### 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) - -### 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 +~~~{ .sql } +SELECT * FROM wp_options WHERE option_name = 'active_plugins'; ~~~ -*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 + +Require ip 192.0.2.42 + ~~~ -## Bloquer l'exécution de PHP dans wp-contents/uploads - -Avec Apache : +et nous préconisons aussi de bloquer l'exécution de PHP dans wp-contents/uploads (attention, cela risque de casser certains plugins « sales ») : ~~~ @@ -269,7 +151,57 @@ Avec Apache : ~~~ -# 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 @@ -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". - -# Divers - -## Multisite +### WordPress multisite +### 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