Para realizar la acción solicitada, WordPress necesita acceder a su servidor web. por favor ingrese su ftp

28

Estoy siguiendo Cambio de permisos de archivos «WordPress Codex , pero cuando trato de actualizar y / o instalar pluginy / o a themetravés de wp-admin, recibo lo siguiente:

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.

desde el nivel del sistema de archivos:

# ls -ld wp-content/ wp-content/plugins/ wp-content/themes/
drwxrwxr-x.  6 root apache 4096 Jun  2 12:01 wp-content/
drwxrwxr-x. 28 root apache 4096 Jun  2 00:00 wp-content/plugins/
drwxrwxr-x. 11 root apache 4096 May 11 16:34 wp-content/themes/
# 

httpdcorre como apache:

$ ps auxw | grep httpd
root     20158  0.0  0.1 533080 26192 ?        Ss   15:03   0:00 /usr/sbin/httpd -DFOREGROUND
apache   20233  0.0  0.2 612608 34908 ?        S    15:03   0:00 /usr/sbin/httpd -DFOREGROUND
apache   20234  0.0  0.2 538772 46904 ?        S    15:03   0:00 /usr/sbin/httpd -DFOREGROUND
apache   20235  0.0  0.1 536832 24268 ?        S    15:03   0:00 /usr/sbin/httpd -DFOREGROUND
apache   20236  0.0  0.2 626272 35640 ?        S    15:03   0:00 /usr/sbin/httpd -DFOREGROUND
apache   20237  0.0  0.0 535296  9592 ?        S    15:03   0:00 /usr/sbin/httpd -DFOREGROUND
apache   20322  0.0  0.1 537088 26620 ?        S    15:03   0:00 /usr/sbin/httpd -DFOREGROUND
apache   20380  0.0  0.2 626060 33816 ?        S    15:04   0:00 /usr/sbin/httpd -DFOREGROUND
apache   20429  0.0  0.1 538216 29184 ?        S    15:04   0:00 /usr/sbin/httpd -DFOREGROUND
apache   20447  0.0  0.2 629380 43180 ?        S    15:04   0:00 /usr/sbin/httpd -DFOREGROUND
apache   20448  0.0  0.2 626172 35224 ?        S    15:04   0:00 /usr/sbin/httpd -DFOREGROUND
alexus   24073  0.0  0.0 112652   972 pts/9    R+   15:13   0:00 grep --color=auto httpd
$ 

Me gustaría poder realizar la acción solicitada ( instally / o update) /wp-admin sin credenciales FTP.

¿Cómo puedo hacer eso?

alexus
fuente
1
¿Es esta una instalación localhost? Si es así, consulte: wordpress.stackexchange.com/questions/19649/…
Greg McMullen
1
@GregMcMullen no, esto NO es una instalación localhost y la respuesta "aceptada" del enlace que comentas es cambiar recursivamente la propiedad de un directorio de WordPress nobody, esto no funcionará para mí debido a que se httpdejecuta como apache.
alexus
@alexus Parece que sus archivos son propiedad de root.apache en este momento. ¿Intentaste apache.apache en lugar de nadie?
Tim Malone
@TimMalone configurando los archivos / directorio como apache.apacheo root.apacheno haría ninguna diferencia, siempre y cuando se httpdejecute apache, y apache's uidsea ​​parte del apache gidgrupo, es todo lo mismo, porque mis permisos están configurados en g+w.
alexus
@alexus Ok, hay algo más que probar: configure FS_METHOD en 'directo' en wp-config.php ( codex.wordpress.org/… )
Tim Malone

Respuestas:

52

Agregue lo siguiente a wp-config.php:

define( 'FS_METHOD', 'direct' );

Déjame saber cómo te funciona.

Narendra Solanki
fuente
funcionó para mí a menos que tenga malos permisos en el sistema de archivos. Por cierto, lo agregué en la parte superior de wp-config.php
Toskan
Asegúrese de leer la publicación a la que Alexus se vinculó antes de usar este método. Este método definitivamente funciona (resolvió el problema para mí), pero definitivamente no debe usar este método en un entorno de alojamiento compartido o en un entorno de riesgo donde pueda comprometer la seguridad al hacer esto.
JamesHoux
16

Esto significa que WordPress tiene un permiso limitado para realizar cambios en la carpeta en la que se instaló.

Para solucionar esto, todo lo que necesita hacer es proporcionar los permisos necesarios para el mismo.

Ejecute el siguiente comando en su Terminal / Putty / Commandline Prompt después de conectarse a su servidor a través de SSH:

sudo chown -R apache:apache /var/www/html

Mira este artículo para más detalles.

Syamraj K
fuente
los permisos están bien, vuelva a leer mi pregunta)
alexus
3
chown: usuario no válido: 'apache: apache'
numediaweb
2
Recuerde, Apache puede ser usuarios diferentes en diferentes versiones de Linux. Por lo tanto, puede probar grupos <nombre de usuario> y ver si se produce un error o no, ya que el usuario y el grupo de Apache suelen ser los mismos. Luego use el usuario correcto. El más común en Ubuntu es "www-data: www-data" o "www: www" para crear archivos Apache.
MontyThreeCard
2

Aunque es totalmente correcto tener la propiedad como root:apachecon los permisos 775 y httpd para ejecutarse como apache, Wordpress no le gusta esto. Quiere que el propietario sea apache, según wp-admin/includes/file.php:

    // Attempt to determine the file owner of the WordPress files, and that of newly created files
   $wp_file_owner = $temp_file_owner = false;
   if ( function_exists('fileowner') ) {
      $wp_file_owner = @fileowner( __FILE__ );
      $temp_file_owner = @fileowner( $temp_file_name );
  }

El tuyo sería:
wp_file_owner = root
temp_file_owner = apache

if ( $wp_file_owner !== false && $wp_file_owner === $temp_file_owner ) {
    // WordPress is creating files as the same owner as the WordPress files,
    // this means it's safe to modify & create new files via PHP.
    $method = 'direct';
    $GLOBALS['_wp_filesystem_direct_method'] = 'file_owner';
} elseif ( $allow_relaxed_file_ownership ) {
    // The $context directory is writable, and $allow_relaxed_file_ownership is set, this means we can modify files
    // safely in this directory. This mode doesn't create new files, only alter existing ones.
    $method = 'direct';
    $GLOBALS['_wp_filesystem_direct_method'] = 'relaxed_ownership';
}

Si $ wp_file_owner es igual a $ temp_file_owner, continúe. El suyo quedaría atrapado en el elseif, que según el comentario no permite eliminar / crear, sino solo actualizaciones (verifiqué esto actualizando el código de un complemento desde Wordpress, y funcionó).

Tenga en cuenta que no examiné exhaustivamente el código, esta es solo mi interpretación rápida. Tuve el mismo problema y una vez que cambié de usuario: grupo para que el usuario httpd también sea el propietario del archivo, ya no solicitó las credenciales FTP.

w00t
fuente
Sí, cambiar el dueño para que www-datatrabajara para mí. Divertido WordPress!
ankush981
1

No es una respuesta directa, pero probablemente deba decirse: este es un problema que debe evitar resolver a menos que esté hablando de un desarrollo local, en cuyo caso solo puede establecer permisos en 777.

La razón es que si el servidor web puede sobrescribir su código, cualquier código malicioso que se ejecute en él también podrá hacerlo. El riesgo es mucho mayor que la conveniencia de ahorrar unos segundos al no tener que escribir las credenciales ftp.

Mark Kaplun
fuente
0

Aunque la pregunta ya no es tan nueva, también quiero agregar mis dos centavos sobre este tema.

Muchas personas tienen Centos (7) en su servidor VPS y las siguientes líneas de código podrían resolver su problema.

Imho tiene todo que ver con SELinux, que evita que WordPress haga su trabajo como lo desea. Llega demasiado lejos para explicar qué es SELinux y qué hace. Para su información, la introducción comienza con:

Security-Enhanced Linux (SELinux) es un mecanismo de seguridad de control de acceso obligatorio (MAC) implementado en el kernel.

Solo 3 pasos a seguir:

  • 1 Abra una terminal (o acceda al servidor a través de SSH)
  • 2 Agregue la siguiente línea de código chcon -R -t httpd_sys_content_t /var/www/html/wordpress
  • 3 Agregar segunda línea de código chcon -R -t httpd_sys_rw_content_t /var/www/html/wordpress

No es necesario reiniciar desde el servidor o reiniciar desde cualquier demonio necesario.

No diré que ayuda a todos, pero para aquellos que no deshabilitaron SELinux, debería ser un alivio.

Aclamaciones

Nota: ajústese a sus propias necesidades (es decir, la ruta a WordPress)

editar: asegúrese de eliminar la línea define("FS_METHOD", "direct");cuando se usa / se usó wp-config.phpporque eso es absolutamente imposible cuando las líneas de código anteriores hacen lo que se desea.

Charles
fuente
0

En mi caso, resolví esto cambiando de GIT al modo FTP.

No más advertencias.

Quizás eso ayude a alguien más también.

MarkPraschan
fuente