Aprende a forzar a WordPress a usar el sistema de archivos en lugar de FTP para manejar archivos.

Cómo evitar que WordPress solicite credenciales FTP / SFTP al instalar un plugin o tema

Después de implementar un sitio de WordPress en uno de mis VPS e intentar instalar un complemento en este entorno, apareció el diálogo mencionado de Wordpress y afirma que "Para realizar la acción solicitada, WordPress necesita acceder a su servidor web. Ingrese sus credenciales de FTP para continuar. Si no recuerda sus credenciales, debe comunicarse con su proveedor de alojamiento web ".

Hay algunos puntos técnicos que causan este problema y pueden no ser de interés para los usuarios habituales (los usuarios habituales probablemente terminarán pidiendo al administrador del servidor las credenciales de FTP, ya que es mucho más fácil y seguro). Sí, parece ser mucho más seguro para el sistema, ya que es una medida de seguridad bastante buena, por lo que las posibles vulnerabilidades o ataques de complementos de fuentes no confiables no pueden modificar los archivos alojados en tu servidor.

Sin embargo, si eres un desarrollador y conoces los permisos de archivos en el entorno Linux y te enfrentas a este problema, es posible que ya hayas asignado los permisos al directorio wp-content/plugins para que WordPress pueda instalar los complementos sin el problema de permisos, pero el el problema persiste, ¿verdad? En este artículo, le proporcionaré una explicación técnica del problema y cómo resolverlo.

¿Por qué pasó esto?

Este cuadro de diálogo se activa cuando se utilizan las clases de sistema de archivos de WordPress. En este caso, al intentar instalar un complemento o tema, el contenido del complemento debe extraerse en wp-content/plugins, en el caso de un tema, wp-content/themes¿no es así? Entonces, el código del método get_filesystem_method es el siguiente:

/**
 * Determines which method to use for reading, writing, modifying, or deleting
 * files on the filesystem.
 *
 * The priority of the transports are: Direct, SSH2, FTP PHP Extension, FTP Sockets
 * (Via Sockets class, or `fsockopen()`). Valid values for these are: 'direct', 'ssh2',
 * 'ftpext' or 'ftpsockets'.
 *
 * The return value can be overridden by defining the `FS_METHOD` constant in `wp-config.php`,
 * or filtering via {@see 'filesystem_method'}.
 *
 * @link https://wordpress.org/support/article/editing-wp-config-php/#wordpress-upgrade-constants
 *
 * Plugins may define a custom transport handler, See WP_Filesystem().
 *
 * @since 2.5.0
 *
 * @global callable $_wp_filesystem_direct_method
 *
 * @param array  $args                         Optional. Connection details. Default empty array.
 * @param string $context                      Optional. Full path to the directory that is tested
 *                                             for being writable. Default empty.
 * @param bool   $allow_relaxed_file_ownership Optional. Whether to allow Group/World writable.
 *                                             Default false.
 * @return string The transport to use, see description for valid return values.
 */
function get_filesystem_method( $args = array(), $context = '', $allow_relaxed_file_ownership = false ){ /* */ }

Este intenta crear un archivo temporal en el directorio wp-content. Si la creación falla, entonces el método que se utilizará para trabajar con archivos será a través de FTP.

Solución

Entonces, el problema es que el propietario del proceso actual (el que ejecuta WordPress como Apache o PHP) no tiene derecho a escribir directamente en el directorio raíz wp-content. Sin embargo, si dices que ya arreglaste el permiso para wp-content/plugins wp-content/themes usando chmod, entonces necesitas forzar a WordPress a usar el sistema de archivos nativo. Puedes hacer esto declarando la siguiente directiva en tu archivo wp-config.php:

define('FS_METHOD', 'direct');

Después de forzar el uso del sistema de archivos, el cuadro de diálogo ya no aparecerá y la instalación de complementos y temas tendrá éxito si y solo si los permisos de los directorios mencionados otorgan acceso al usuario que ejecuta el proceso de WordPress.

Si después de esta modificación falla la instalación de complementos y temas, debe ajustar los permisos de los directorios wp-content/plugins wp-content/themes. Puedes determinar qué usuario está ejecutando el servicio de WordPress ejecutando el siguiente código PHP en tu instancia de WordPress:

<?php 
    // por ejemplo "www-data"
    echo(exec("whoami")); 
?>

Luego, ajusta los permisos para cada directorio con chown:

sudo chown -R www-data:www-data /wp-content/plugins

sudo chown -R www-data:www-data /wp-content/themes

Que te diviertas❤️!


Interesado en la programación desde los 14 años, Carlos es un programador autodidacta, fundador y autor de la mayoría de los artículos de Our Code World.

Conviertete en un programador más sociable

Patrocinadores