Sous WordPress 5.3.x et en utilisant wp-cli, on peut obtenir cette erreur lors de la mise à jour de plugins et thèmes:
Warning: ftp_nlist() expects parameter 1 to be resource, null given in /var/www/html/wp-admin/includes/class-wp-filesystem-ftpext.php on line 402
PHP Warning: ftp_pwd() expects parameter 1 to be resource, null given in /var/www/html/wp-admin/includes/class-wp-filesystem-ftpext.php on line 226Code language:HTTP(http)
Le tout répété cinq à six fois pour la mise à jour d’un plugin. En regardant le ticket trac qui rapporte ce problème, il s’agit d’une erreur qui était auparavant cachée (avec un @ devant la fonction) et qui est maintenant affichée.
Au -delà du fait de cacher ou ne plus cacher l’erreur, il semble qu’il manque une routine qui vérifie que le lien wp_filesystem est bien actif avant de pouvoir l’utiliser.
En attendant que cela soit réglé dans une prochaine version de WordPress, voici ce que l’on peut ajouter au fichier wp-config.php pour se débarrasser de l’erreur proprement:
Depuis que je suis passé à MacOS X Catalina, j’ai ajouté l’outil capture d’écran dans la Touchbar, histoire de toujours l’avoir à portée de main.
Pour les puristes, vous pouvez capturer l’écran avec Shift-Command-5 (à partir de Mojave et supérieur) ou Shift-Command-3.
Par contre, toutes les captures d’écran sont préfixées par défaut avec “Capture d’écran” suivie de la date et de l’heure. Cela peut être gênant lorsque l’on publie cette image sur internet, étant donné que les noms de fichiers accentués ne sont pas toujours bien gérés.
Voici donc une petite astuce pour changer le préfixe pour celui de votre choix. Dans mon exemple, je l’ai tout simplement changé pour “Screenshot”.
Changer le nom de fichier par défaut de l’outil capture d’écran
Ouvrez le terminal puis lancez la commande suivante, en remplaçant “Screenshot” par le préfixe de votre choix:
Je suis en train de faire le ménage sur d’anciennes machines que je donne sur donnons.org : cela me permet de récupérer quelques (vieilles) données pour les sauvegarder sur le NAS avant de formater les disques durs pour leur nouvelle vie.
En changeant de machine, je me suis aperçu que le certificat TLS du NAS n’était plus valide… depuis fin février 2019! What??
Après quelques infructueux essais de renouveler le certificat, il semblerait que le passage à DSM 6.2 soit à l’origine du problème.
On m’a demandé sur Codeable un audit SEO sur un site qui avait plusieurs années d’existence et dont la ligne éditoriale a évolué avec le temps.
Les vieux articles, très courts et peu informatifs, offraient peu de valeur aux visiteurs et devaient donc être listés dans le but de les amender ou de les supprimer.
Le site était sous WordPress donc voici la requête que j’ai utilisée pour dresser la liste de tous les articles qui contiennent moins de 300 mots (on ne compte pas les espaces):
SELECT LENGTH(post_content) - LENGTH(REPLACE(post_content, ' ', ''))+1, post_title, ID
FROM wp_posts WHERE post_type='post' AND post_status='publish' AND ((LENGTH(post_content) - LENGTH(REPLACE(post_content, ' ', ''))+1) < 300);Code language:JavaScript(javascript)
Vous pouvez lancer cette requête SQL sur votre serveur MySQL ou dans un outil comme PHPMyAdmin ou Adminer: cela vous renvoie un tableau de 3 entrées qui contiennent le nombre de mots de l’article, le titre de l’article et son ID.
Au point de vue du SEO, il est recommandé de supprimer les articles zombies qui n’offrent pas de valeur aux visiteurs. Ces pages ne sont généralement pas indexées et n’apparaissent donc pas dans les résultats de recherche.
Mieux vaut consolider le site avec des pages à fort potentiel et avec un contenu conséquent. Ce n’est pas tant le nombre de mots qui compte que la richesse de contenu mais un nombre très faible de mots est un bon indicateur d’un article peu qualifié.
Aujourd’hui, j’ai installé LineageOS (Android 9.0 Pie) sur mon OnePlus One, histoire de lui redonner un second souffle et de bénéficier des dernières mises à jour de sécurité Android.
Le OnePlus One (OPO) est sorti en mai 2014, il a donc quelques années derrière lui et tourne sous CyanogenMod 13, c’est-à-dire Android 6.0.1 (Marshmallow). Autant dire qu’il n’a pas vu de correctifs de sécurité depuis quelques années!
Étape 1: activer le débogage USB
Sur le téléphone, on commence par activer le mode développeur:
Ouvrez Paramètres > A propos du téléphone.
Tapez 7 fois sur le numéro de build.
Vous venez d’activer le mode développeur!
Grâce au mode développeur, vous avez maintenant accès à des options qui n’étaient pas visibles auparavant et qui vont nous être nécessaires.
Pour activer le débogage USB:
Ouvrez Paramètres > Options pour les développeurs
Activez l’option Débogage Android
Désactivez l’option Mettre à jour la récupération CyanogenMod (sinon l’installation du recovery sera impossible).
Étape 2: installation d’ADB
Android Debug Bridge (adb) est un outil de développement qui facilite la communication entre un appareil Android et un ordinateur. Cette communication s’effectue soit par câble USB, soit en WiFi.
Lors d’une connexion SSH sur le serveur d’un client chez WPEngine, je suis tombé sur le message d’erreur suivant:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644for'/Users/matt/.ssh/id_ed25519.pub' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/Users/matt/.ssh/id_ed25519.pub": bad permissionsCode language:PHP(php)
Au lieu d’utiliser ma clé privée, j’ai utilisé ma clé publique (id_ed25519.pub) qui – comme elle est publique – bénéficie de droits plus large que la clé privée.
Il faut donc relancer la commande en retirant l’extension .pub du chemin de la clé, pour que la clé privée soit prise en compte:
Si vous utilisez fail2ban sur votre serveur dédié – et vous devriez! – il peut être vraiment utile de lister les statuts de toutes les jails fail2ban.
Cela permet de voir quelles sont les jails actives et de vérifier qu’il n’y a aucun problème de configuration.
On peut obtenir le statuts de toutes les jails fail2ban avec la commande suivante:
fail2ban-client status | sed -n 's/,//g;s/.*Jail list://p' | xargs -n1 fail2ban-client statusCode language:JavaScript(javascript)
Voici un exemple de résultat de la commande:
Status for the jail: pam-generic
|- Filter
| |- Currently failed: 0
| |- Total failed: 0
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 0
|- Total banned: 0
`- Banned IP list:
Status for the jail: postfix
|- Filter
| |- Currently failed: 0
| |- Total failed: 4482
| `- File list: /var/log/mail.log
`- Actions
|- Currently banned: 0
|- Total banned: 223
`- Banned IP list:
Status for the jail: sasl
|- Filter
| |- Currently failed: 4
| |- Total failed: 14126
| `- File list: /var/log/mail.log
`- Actions
|- Currently banned: 4
|- Total banned: 1927
`- Banned IP list: 45.148.10.7046.38.144.1746.38.144.20246.38.144.32
Status for the jail: sshd
|- Filter
| |- Currently failed: 0
| |- Total failed: 0
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 0
|- Total banned: 0
`- Banned IP list:Code language:PHP(php)
Depuis le passage du site sur le nouveau serveur, ORION, j’utilise MySQL 8 en lieu et place de MariaDB, histoire de tester les les gains de performance.
Or, avec la nouvelle configuration de MySQL par défaut, vous pouvez obtenir cette erreur lors de simples opération de maintenance comme l’optimisation des tables:
example.wp_comments: Table does not support optimize, doing recreate + analyze instead
example.wp_comments: Invalid default value for'comment_date'
example.wp_comments: Operation failed
example.wp_et_social_stats: Incorrect datetime value: '0000-00-00 00:00:00'for column 'comment_date' at row 1
example.wp_et_social_stats: Invalid default value for'comment_date'
example.wp_et_social_stats: Table does not support optimize, doing recreate + analyze instead
example.wp_et_social_stats: Invalid default value for'sharing_date'
example.wp_et_social_stats: Operation failedCode language:JavaScript(javascript)
Ce qui pose problème, ce sont ces deux directives: NO_ZERO_IN_DATE et NO_ZERO_DATE.
Deux solutions s’offrent à nous : éditer la valeur directement depuis la console mysql ou alors depuis le fichier de configuration my.cnf.
Méthode 1 : éditer la valeur de sql_mode depuis la console MySQL
Si vous vous trouvez toujours dans la console mysql, vous pouvez lancer la reqête suivante, qui enlève les drapeaux NO_ZERO_IN_DATE et NO_ZERO_DATE à notre directive sql_mode:
SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';Code language:JavaScript(javascript)
Relancez ensuite le serveur:
service mysql restart
Méthode 2 : éditer la valeur de sql_mode depuis le fichier de configuration MySQL (my.cnf)
Nous allons donc éditer notre fichier de configuration MySQL:
nano /etc/mysql/mysql.conf.d/mysqld.cnf
Et ajouter (ou modifier) la variable de configuration sql_mode en l’amputant des valeurs NO_ZERO_IN_DATE et NO_ZERO_DATE:
Sur un nouveau serveur à base d’Ubuntu Server 18.04, j’obtiens cette erreur à la suite d’un test du service ssh:
sshd -t
Could not load host key: /etc/ssh/ssh_host_ed25519_key
Missing privilege separation directory: /run/sshdCode language:JavaScript(javascript)
Les solutions à ces deux problèmes sont triviales, cela se règle en deux petites commandes.
L’erreur Could not load host key
L’erreur Could not load host key survient lorsque certaines clés SSH n’ont pas été générées lors de l’installation du système d’exploitation du serveur.
Dans le cas du serveur qui nous occupe, il nous manque la clé de chiffrement ED25519 qui doit se trouver à l’adresse /etc/ssh/ssh_host_ed25519_key.
Pour générer toutes les clés de chiffrement SSH manquantes, une seule commande suffit:
ssh-keygen -A
L’argument -A signifie que l’on génère toutes les clés (All keys). Voici le résultat sur le serveur:
ssh-keygen: generating new host keys: ED25519Code language:JavaScript(javascript)
Le hotlinking (ou liaison automatique ; aussi connu en anglais sous les noms de inline linking, leeching, piggy-backing, direct linking ou offsite image grabs) consiste à utiliser l’adresse d’un fichier publié sur un site web, le plus souvent une image, pour l’afficher sur un autre site, sur un blog, dans un forum, etc.
En d’autres termes, au lieu d’enregistrer l’image et de l’installer sur son propre serveur Web, le hotlinkeur crée un lien direct vers le serveur d’origine.
Sous NginX, il peut être très utile d’éviter que des gens publient vos photos ou images depuis votre site sur le leur, en gardant les liens de votre serveur et en consommant toute votre bande passante (ce qui peut représenter un surcoût pour vous).
Il suffit d’éditer votre server block et d’y ajouter cette directive:
location ~ \.(gif|png|jpeg|jpg|svg|webp|avif)$ {
# Define allowed referers - your own domain and specific external domains
valid_referers none blocked
~\.google\.
~\.bing\.
~\.yahoo\.
~\.facebook\.
~\.pinterest\.
~\.twitter\.
yourdomain.com
*.yourdomain.com
server_names;
# Block requests with no or invalid refererif ($invalid_referer) {
return403;
}
}
Code language:PHP(php)
N’hésitez pas à rajouter les domaines que vous souhaitez whitelister et qui sont autorisés à utiliser vos fichiers média.
Relancez ensuite NginX avec:
service nginx restart
Cela devrait quelque peu soulager votre serveur et garantir votre bande passante à vos visiteurs.
La valeur du chmod telle qu’elle apparaît dans le terminal est un peu esotérique. Prenons par exemple le chmod d’un fichier standard de WordPress : -rw-r-----, cela demande une petite gymnastique intellectuelle pour réaliser quels sont les droits véritables.
Je vous propose donc une petite commande qui va vous simplifier la vie, de manière à vous donner la valeur numérique du chmod des fichiers et répertoires.
Il vous suffit d’utiliser la commande stat comme ceci, dans votre fenêtre de terminal:
stat -c '%a %U:%G %n' *Code language:JavaScript(javascript)
Notes:
-c permet de formater la sortie avec la template entre apostrophes
Il peut être extrêmement utile d’activer la connexion SSH chez certains hébergeurs qui la proposent, comme SiteGround. Cela permet de gagner pas mal de temps, notamment lorsque l’on utilise wp-cli.
Mais avant de pouvoir se connecter, il faut d’abord l’activer dans les options de CPanel.
Activation de la connection SSH dans CPanel
Rendez-vous dans CPanel > Security > SSH Shell Access :
Ensuite, cliquez sur le bouton Manage SSH Keys:
Nous avons ensuite le choix entre deux solutions : soit nous créons la paire de clés privées/publiques sur le serveur et nous les copions sur notre machine locale, soit nous la créons en locale et l’envoyons sur le serveur. Je suis plutôt pour la seconde solution.
Création des clés SSH
On se rend dans le répertoire SSH de notre utilisateur et on liste le répertoire:
cd ~/.ssh
ls
Si le fichier id_rsa.pub existe déjà, il suffit d’afficher son contenu:
catid_rsa.pubCode language:CSS(css)
Si le fichier n’existe pas, il suffit de le créer:
ssh-keygen
Copiez le contenu du fichier, il s’agit de la clé publique que nous allons importer dans CPanel.
Import de notre clé SSH dans CPanel
Cliquez sur Import Key:
Renommez la clé pour id_rsa puis collez le contenu de votre clé SSH publique:
Il ne vous reste plus qu’à vous connecter en SSH au serveur. Suivant votre hébergeur, le numéro du port SSH peut changer pour des raisons de sécurité. Chez SiteGround, SSH tourne sur le port 18765: