Advertencias de ftp_nlist() y ftp_pwd() en WordPress

3 may 2020, 19:52:59
Vistas: 16.3K
Votos: 7

No estoy seguro de cuándo comenzó esta advertencia. Recibí un sitio existente para administrar su alojamiento y apliqué las siguientes buenas prácticas:

  • Actualicé WordPress - de 5.3 a 5.4.0 (versión actual de WP)
  • Actualicé todos los plugins - es una lista larga así que no la incluiré aquí
  • Cambié los permisos y propietario de los archivos - todo pertenece a mi usuario (no a Apache) y solo la carpeta wp-content tiene permisos de escritura para Apache (con algunas restricciones internas) -> Guía de Fortalecimiento de WordPress

Como nota, el usuario y grupo de Apache son utilizados tanto por Apache como por PHP-FPM. Solo usamos el servidor (VM) para este sitio web, por lo que no tengo que abordar desafíos de seguridad relacionados con el uso compartido de procesos.

Con estos cambios, comencé a tener las siguientes advertencias de PHP (Sí, ¡hice todo al mismo tiempo! Lo siento por eso):

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

Estas advertencias aparecen en el archivo de registro de PHP-FPM en cada llamada al servidor. Si configuro define( 'WP_DEBUG', true ); se pueden encontrar en cada página.

Pasos para resolver

Puedo detener estas advertencias haciendo una de las siguientes acciones:

Ninguno de estos cambios es la solución deseada. El primero rompe el sitio, y el segundo crea un problema de seguridad.

¿Error de WordPress?

También encontré el problema 48689 de WordPress que describe los mismos errores pero asociados con diferentes plugins. Sin embargo, la solución (if (!defined('FS_METHOD')) define('FS_METHOD', 'direct');) no funciona en mi caso. Las opciones restantes de ocultar las advertencias no parecen ser una buena idea.

1
Comentarios

con WordPress actualizándose automáticamente ahora, ¿sigue siendo una buena idea mantener los archivos bloqueados para tu usuario y del usuario www-data?

wruckie wruckie
18 mar 2022 20:31:58
Todas las respuestas a la pregunta 1
3
20

¡Después de todo, ya estaba en la pregunta!

Contexto

Ambos plugins están relacionados con el tema de mi sitio WordPress (uplift). No puedo entender qué está haciendo o dónde, pero cuando detecta que el propietario de los archivos no es el usuario que los ejecuta (apache), cambia el método de acceso a FTP.

Esta acción no me parece lógica, porque incluso si hago 775 usuario:apache (pseudo-código), no funciona (está buscando al propietario, no si tiene permisos). Podría hacer 575 apache:usuario, pero en ese caso, apache puede ejecutar CHMOD, lo que lo hace inútil.

Además, esto está sucediendo fuera de wp-content. Y no está documentado por los plugins o el tema, lo que para mí parece un problema de seguridad. 0 resultados para "owner" y "permission" en la documentación.

Solución

Simplemente añade define('FS_METHOD', 'direct');.

¡Con un poco de precaución! Esto debe añadirse antes de require_once( ABSPATH . 'wp-settings.php' );. ¿Por qué? De nuevo, no tengo idea. Sin embargo, esto es un requisito para varias configuraciones, como puedes ver en la página de documentación sobre editar wp-config.php.

Precauciones

Como se menciona en esta respuesta, usar FS_METHOD puede representar un riesgo de seguridad en alojamientos compartidos. No es mi caso, así que mi investigación terminó aquí.

Dudas pendientes

Siéntete libre de responder las siguientes dudas (en los comentarios o con una respuesta, aceptaré la respuesta o complementaré la mía según corresponda):

  1. ¿Qué está haciendo el tema uplift? ¿Por qué necesitan verificar el propietario?
  2. ¿Por qué la configuración FS_METHOD debe cargarse antes de la página wp-settings.php?
  3. ¿Cuál sería la solución para un escenario de alojamiento compartido?
3 may 2020 19:52:59
Comentarios

Funcionó exactamente como se describe arriba. ¡Gracias!

flangofas flangofas
1 dic 2020 22:32:06

¡Muchas gracias por esta publicación! He estado luchando durante una semana debido a errores similares a los que describes, que impedían actualizaciones y la configuración de un plugin en mi sitio web. Había leído muchas veces sobre agregar "define('FS_METHOD', 'direct');" en el archivo de configuración de WordPress para que funcione en un servidor Synology (mi caso de hosting) Pero aún no había leído sobre la necesidad de tener esa línea antes de "require_once( ABSPATH . 'wp-settings.php' );". En mi caso estaba colocada justo después y cuando la moví una línea arriba, ¡de repente todo comenzó a funcionar! ¡Genial! Gracias de nuevo

Gab Gab
25 jul 2022 22:45:31

¡Gracias, hermano! ¡Esto me ahorró mucha frustración! Comencé a tener este problema después de cambiar de hosting.

BenVida BenVida
25 abr 2024 07:59:38