Avvisi ftp_nlist() e ftp_pwd() in WordPress

3 mag 2020, 19:52:59
Visualizzazioni: 16.3K
Voti: 7

Non sono sicuro di quando sia iniziato questo avviso. Ho preso in carico un sito esistente per gestirne l'hosting e ho applicato le seguenti buone pratiche:

  • Aggiornato Wordpress - dalla versione 5.3 alla 5.4.0 (versione attuale di WP)
  • Aggiornati tutti i plugin - è una lista lunga quindi non la riporto qui
  • Modificato i permessi e il proprietario dei file - tutto di proprietà del mio utente (non Apache) e solo la cartella wp-content è scrivibile da Apache (con alcune restrizioni interne) -> Guida per il rafforzamento della sicurezza di WordPress

Come nota, l'utente e il gruppo di Apache sono utilizzati sia da Apache che da PHP-FPM. Utilizziamo il server (VM) solo per questo sito web, quindi non devo affrontare problemi di sicurezza legati alla condivisione dei processi.

Con queste modifiche, ho iniziato a ricevere i seguenti avvisi PHP (Sì, ho fatto tutto allo stesso tempo! Scusate per questo):

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

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 226

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 226

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 681

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

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 226

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 226

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 681

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

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 226

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 226

Warning: ftp_rmdir() expects parameter 1 to be resource, null given in /var/www/html/wp-admin/includes/class-wp-filesystem-ftpext.php on line 381

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

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 226

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 226

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 681

Questi avvisi compaiono nel file di log di PHP-FPM ad ogni chiamata al server. Se imposto define( 'WP_DEBUG', true ); possono essere visualizzati in ogni pagina.

Passaggi per risolvere

Posso fermare questi avvisi facendo una delle seguenti operazioni:

Nessuna di queste modifiche è la soluzione desiderata. La prima rompe il sito, e la seconda crea un problema di sicurezza.

Bug di WordPress?

Ho anche trovato il problema 48689 di WordPress che descrive gli stessi errori ma associati a plugin diversi. Tuttavia, la soluzione (if (!defined('FS_METHOD')) define('FS_METHOD', 'direct');) non funziona nel mio caso. Le opzioni rimanenti, come nascondere gli avvisi, non sembrano essere una buona idea.

1
Commenti

con WordPress che ora si aggiorna automaticamente, è ancora una buona idea mantenere i file bloccati al tuo utente e dall'utente www-data?

wruckie wruckie
18 mar 2022 20:31:58
Tutte le risposte alla domanda 1
3
20

Dopotutto, era già nella domanda!

Contesto

Entrambi i plugin sono correlati al tema del mio sito WordPress (uplift). Non riesco a capire cosa stia facendo o dove, ma quando rileva che il proprietario dei file non è l'utente in esecuzione (apache), cambia il metodo di accesso in FTP.

Questa azione non mi sembra logica, perché anche se faccio 775 utente:apache (pseudo-codice), non funziona (sta cercando il proprietario, non se ha i permessi). Potrei fare 575 apache:utente ma in quel caso, apache può eseguire CHMOD, quindi è inutile.

Inoltre, questo sta accadendo al di fuori di wp-content. E non è documentato né dai plugin né dal tema, il che per me sembra un problema di sicurezza. 0 risultati per "owner" e "permission" nella documentazione.

Soluzione

Basta aggiungere define('FS_METHOD', 'direct');.

Con una piccola precauzione! Questo deve essere aggiunto prima di require_once( ABSPATH . 'wp-settings.php' );. Perché? Ancora, non ne ho idea. Tuttavia, questo è un requisito per diverse configurazioni come puoi vedere nella pagina di documentazione Editing wp-config.php

Attenzioni

Come affermato in questa risposta, l'uso di FS_METHOD può rappresentare un rischio per la sicurezza in hosting condivisi. Non è il mio caso, quindi la mia indagine si è conclusa qui.

Mancanze

Sentiti libero di rispondere ai seguenti dubbi (nei commenti o con una risposta, accetterò la risposta o completerò la mia di conseguenza):

  1. Cosa sta facendo il tema uplift? Perché hanno bisogno di verificare il proprietario?
  2. Perché l'impostazione FS_METHOD deve essere caricata prima della pagina wp-settings.php?
  3. Quale sarebbe la soluzione per uno scenario di hosting condiviso?
3 mag 2020 19:52:59
Commenti

Ha funzionato esattamente come descritto sopra. Grazie!

flangofas flangofas
1 dic 2020 22:32:06

Grazie mille per questo post! Ho lottato per una settimana a causa di errori simili a quelli che descrivi che impedivano aggiornamenti e configurazione di un plugin sul mio sito. Avevo letto molte volte di aggiungere "define('FS_METHOD', 'direct');" nel file di configurazione di WordPress per farlo funzionare su un server Synology (nel mio caso l'host) Ma non avevo ancora letto che quella riga doveva essere posizionata prima di "require_once( ABSPATH . 'wp-settings.php' );" Nel mio caso era posizionata subito dopo e quando l'ho spostata su una riga sopra, improvvisamente tutto ha iniziato a funzionare! Fantastico! Grazie ancora

Gab Gab
25 lug 2022 22:45:31

Grazie, amico! Questo mi ha risparmiato molta frustrazione! Ho iniziato ad avere questo problema dopo aver cambiato hosting.

BenVida BenVida
25 apr 2024 07:59:38