Permisos de archivo correctos para WordPress


He echado un vistazo a aquí pero no he encontrado ningún detalle sobre los mejores permisos de archivo. También eché un vistazo a algunas de las preguntas del formulario de WordPress sobre aquí también pero cualquiera que sugiera 777 obviamente necesita una pequeña lección de seguridad.

En resumen mi pregunta es esta. Qué permisos debo tener para lo siguiente:

  1. carpeta raíz que almacena todo el WordPress contenido
  2. wp-admin
  3. wp-content
  4. wp-includes

Y luego todos los archivos en cada una de esas carpetas?

Author: Farkie, 2013-08-21

15 answers

Cuando configura WP, es posible que (el servidor web) necesite acceso de escritura a los archivos. Por lo tanto, los derechos de acceso pueden tener que estar sueltos.

chown www-data:www-data  -R * # Let Apache be owner
find . -type d -exec chmod 755 {} \;  # Change directory permissions rwxr-xr-x
find . -type f -exec chmod 644 {} \;  # Change file permissions rw-r--r--

Después de la configuración, debe ajustar los derechos de acceso, de acuerdo con Endurecer WordPress todos los archivos, excepto wp-content, deben poder ser escritos solo por su cuenta de usuario. wp-content debe ser escribible por www-data también.

chown <username>:<username>  -R * # Let your useraccount be owner
chown www-data:www-data wp-content # Let apache be owner of wp-content

Tal vez desee cambiar el contenido en wp-content más adelante. En este caso podría

  • cambia temporalmente al usuario a www-data con su,
  • dar wp-content group write access 775 y unirse al grupo www-data o
  • dale a tu usuario los derechos de acceso a la carpeta usando ACLs.

Haga lo que haga, asegúrese de que los archivos tienen permisos rw para www-data.

 346
Author: ManuelSchneid3r,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-03 20:09:28

Dar el acceso completo a todos los archivos wp al usuario www-data (que en este caso es el usuario del servidor web) puede ser peligroso. Así que mejor NO hacer esto:

chown www-data:www-data -R *

Sin embargo, puede ser útil en el momento en que se está instalando o actualizando WordPress y sus plug-ins. Pero cuando haya terminado ya no es una buena idea mantener los archivos wp propiedad del servidor web.

Básicamente permite al servidor web poner o sobrescribir cualquier archivo en su sitio web. Esto significa que hay un posibilidad de hacerse cargo de su sitio si alguien logra utilizar el servidor web (o un agujero de seguridad en algunos .script php) para poner algunos archivos en su sitio web.

Para proteger su sitio contra tal ataque, debe hacer lo siguiente:

Todos los archivos deben ser propiedad de su cuenta de usuario, y deben poder escribirse por ti. Cualquier archivo que necesite acceso de escritura desde WordPress debe ser escribible por el servidor web, si su configuración de alojamiento lo requiere, que puede significar que esos archivos necesitan ser propiedad del grupo por la cuenta de usuario utilizada por el proceso del servidor web.

/

El directorio raíz de WordPress: todos los archivos deben ser escribibles solo por su cuenta de usuario, excepto.htaccess si quieres WordPress para generar automáticamente reglas de reescritura para usted.

/wp-admin/

El área de administración de WordPress: todos los archivos deben ser escribibles solo por su cuenta de usuario.

/wp-includes/

La mayor parte de la aplicación de WordPress lógica: todos los archivos deben ser escribibles solo por su cuenta de usuario.

/wp-content/

Contenido proporcionado por el usuario: destinado a ser escribible por su cuenta de usuario y el proceso del servidor web.

Dentro de /wp-content/ encontrarás:

/wp-content/themes/

Archivos de tema. Si desea utilizar el editor de temas incorporado, todos los archivos deben ser escribibles por el proceso del servidor web. Si no desea utilizar el editor de temas incorporado, todos los archivos solo se pueden escribir por su cuenta de usuario.

/wp-content/plugins/

Archivos de plugin: todos los archivos deben ser escribibles solo por su cuenta de usuario.

Otros directorios que pueden estar presentes con /wp-content/ deben ser documentado por cualquier plugin o tema que los requiera. Los permisos pueden variar.

Fuente e información adicional: http://codex.wordpress.org/Hardening_WordPress

 49
Author: Kornel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-18 16:49:36

Para aquellos que tienen su carpeta raíz de wordpress debajo de su carpeta de inicio:

** Ubuntu/apache

  1. Agregue su usuario al grupo www-data:

CRÉDITO Concesión de permisos de escritura al grupo de datos www

Desea llamar a usermod a su usuario. Así que eso sería:

sudo usermod -aG www-data yourUserName

* * Suponiendo que www-data el grupo existe

  1. Compruebe que su usuario está en www-data grupo:

    groups yourUserName

Usted debe conseguir algo como:

youUserName : youUserGroupName www-data

* * youUserGroupName es generalmente similar a su nombre de usuario

  1. Cambie recursivamente la propiedad del grupo de la carpeta wp-content manteniendo su propiedad de usuario

    chown yourUserName:www-data -R youWebSiteFolder/wp-content/*

  2. Cambiar el directorio a youWebSiteFolder/wp-content /

    cd youWebSiteFolder/wp-content

  3. Cambie recursivamente los permisos de grupo de las carpetas y subcarpetas para habilitar los permisos de escritura:

    find . -type d -exec chmod -R 775 {} \;

** modo de '/home/yourUserName/youWebSiteFolder/ wp-content / ' cambiado de 0755 (rwxr-xr-x) a 0775 (rwxrwxr-x)

  1. Cambie recursivamente los permisos de grupo de los archivos y sub-archivos para habilitar los permisos de escritura:

    find . -type f -exec chmod -R 664 {} \;

El resultado debería ser algo así como:

WAS:
-rw-r--r--  1 yourUserName www-data  7192 Oct  4 00:03 filename.html
CHANGED TO:
-rw-rw-r--  1 yourUserName www-data  7192 Oct  4 00:03 filename.html

Equivalente a:

Chmod - R ug + rw foldername

Los permisos serán como 664 para archivos o 775 para directorios.

P. S. si alguien encuentra error 'could not create directory' al actualizar un plugin, hacer:
server@user:~/domainame.com$ sudo chown username:www-data -R wp-content
cuando estás en la raíz de tu dominio.
Suponiendo: wp-config.php ha
las credenciales de FTP en LocalHost
define('FS_METHOD','direct');

 21
Author: Jadeye,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-13 12:37:31

Configuro los permisos a:

    # Set all files and directories user and group to wp-user
    chown wp-user:wp-user -R *

    # Set uploads folder user and group to www-data
    chown www-data:www-data -R wp-content/uploads/

    # Set all directories permissions to 755
    find . -type d -exec chmod 755 {} \;

    # Set all files permissions to 644
    find . -type f -exec chmod 644 {} \;

En mi caso he creado un usuario específico para WordPress que es diferente del usuario predeterminado de apache que impide el acceso desde la web a los archivos propiedad de ese usuario.

Luego le da permiso al usuario de apache para manejar la carpeta de carga y finalmente establecer permisos de archivo y carpeta lo suficientemente seguros.

EDITADO

Si estás usando W3C Total Cache deberías hacer lo siguiente también:

chmod 777 wp-content/w3tc-config
chmod 777 wp-content/cache

rm -rf wp-content/cache/config
rm -rf wp-content/cache/object
rm -rf wp-content/cache/db
rm -rf wp-content/cache/minify
rm -rf wp-content/cache/page_enhanced

Entonces ¡Trabaja!

EDITADO

Después de un tiempo desarrollando sitios de WordPress, recomendaría diferentes permisos de archivo por entorno:

En producción, no daría acceso a los usuarios para modificar el sistema de archivos, solo les permitiría cargar recursos y dar acceso a algunas carpetas específicas de plugins para hacer copias de seguridad, etc. Pero la gestión de proyectos bajo Git y el uso de claves de despliegue en el servidor, no es una buena actualización de plugins en la etapa ni la producción. Os dejo aquí el archivo de producción configuración:

# Set uploads folder user and group to www-data
chown www-data:www-data -R wp-content/uploads/

www-data: www-data = apache or nginx user and group

Staging compartirá los mismos permisos de producción ya que debería ser un clon de la misma.

Finalmente, el entorno de desarrollo tendrá acceso a actualizar plugins, traducciones, todo...

# Set uploads folder user and group to www-data
chown www-data:www-data -R wp-content/

# Set uploads folder user and group to www-data
chown your-user:root-group -R wp-content/themes

# Set uploads folder user and group to www-data
chown your-user:root-group -R wp-content/plugins/your-plugin

www-data: www-data = apache or nginx user and group your-user: root-group = su usuario actual y el grupo raíz

Estos permisos le darán acceso a desarrollar en la carpeta themes y your-plugin sin pedir permiso. El resto del contenido será propiedad del usuario Apache o Nginx para permitir que WP administre el sistema de archivos.

Antes de crear un repositorio de git, ejecute primero estos comandos:

# Set all directories permissions to 755
find . -type d -exec chmod 755 {} \;

# Set all files permissions to 644
find . -type f -exec chmod 644 {} \;
 13
Author: Pablo Ezequiel Leone,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-07 22:11:31

Los permisos correctos para el archivo son 644 Permisos correctos para la carpeta es 755

Para cambiar los permisos , utilice los comandos terminal y siguientes.

find foldername -type d -exec chmod 755 {} \;
find foldername -type f -exec chmod 644 {} \;

755 para carpetas y 644 para archivos.

 9
Author: Kappa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-13 11:23:41

Lo mejor es leer la documentación de wordpress sobre esto https://codex.wordpress.org/Changing_File_Permissions

  • Todos los archivos deben ser propiedad de la cuenta de usuario real, no de la cuenta de usuario utilizada para el proceso httpd
  • La propiedad del grupo es irrelevante, a menos que haya requisitos específicos de grupo para la comprobación de permisos del proceso del servidor web. Este no suele ser el caso.
  • Todos los directorios deben ser 755 o 750.
  • Todos los archivos deben ser 644 o 640. Excepción: wp-config.php debe ser 440 o 400 para evitar que otros usuarios en el servidor lo lean.
  • No se debe dar a ningún directorio 777, ni siquiera subir directorios. Dado que el proceso php se está ejecutando como el propietario de los archivos, obtiene los permisos de propietarios y puede escribir incluso en un directorio 755.
 8
Author: PodTech.io,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-30 10:59:16

Creo que las siguientes reglas se recomiendan para un sitio predeterminado de wordpress:

  • Para carpetas dentro de wp-content, establezca los permisos 0755:

    Chmod-R 0755 plugins

    Chmod - R 0755 uploads

    Chmod-R 0755 actualización

  • Deje que el usuario apache sea el propietario de los directorios anteriores de wp-content:

    Chown apache subidas

    Actualización de Chown apache

    Chown apache complementos

 7
Author: shasi kanth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-27 11:10:45

En realidad depende de los complementos que planea usar, ya que algunos complementos cambian el documento raíz de wordpress. pero generalmente recomiendo algo como esto para el directorio de wordpress.

Esto asignará la "raíz" (o lo que sea el usuario que está utilizando) como el usuario en cada archivo/carpeta, R significa recursivo, por lo que simplemente no se detiene en la carpeta "html". si no utilizó R, entonces solo se aplica al directorio "html".

sudo chown -R root:www-data /var/www/html  

Esto establecerá la propietario / grupo de "wp-content" a "www-data" y permitiendo así al servidor web instalar los plugins a través del panel de administración.

chown -R www-data:www-data /var/www/html/wp-content

Esto establecerá el permiso de cada archivo en la carpeta "html" (Incluidos los archivos en los subdirectorios) a 644, por lo que las personas externas no pueden ejecutar ningún archivo, modificar cualquier archivo, grupo no puede ejecutar ningún archivo, modificar cualquier archivo y solo el usuario puede modificar/leer archivos, pero aún así el usuario no puede ejecutar ningún archivo. Esto es importante porque evita cualquier tipo de ejecución en la carpeta "html", también dado que el propietario de la carpeta html y todas las demás carpetas excepto la carpeta wp-content son "root" (o su usuario), los datos www no pueden modificar ningún archivo fuera de la carpeta wp-content, por lo que incluso si hay alguna vulnerabilidad en el servidor web, y si alguien accedió al sitio sin autorización, no pueden eliminar el sitio principal excepto los complementos.

sudo find /var/www/html -type f -exec chmod 644 {} +

Esto restringirá el permiso de acceso a "wp-config.php " para usuario/grupo con rw-r----- estos permisos.

chmod 640 /var/www/html/wp-config.php

Y si un plugin o actualización se quejó de que no puede actualizar, a continuación, acceder a la SSH y utilizar este comando, y conceder el permiso temporal a "www-data" (servidor web) para actualizar/instalar a través del panel de administración, y luego volver a la "raíz" o su usuario una vez que se ha completado.

chown -R www-data /var/www/html

Y en Nginx (el mismo procedimiento para apache)para proteger la carpeta wp-admin de accesos no autorizados y sondeos. apache2-utils es necesario para cifrar la contraseña incluso si tiene nginx instalado, omita c si planea agregar más usuarios al mismo archivo.

sudo apt-get install apache2-utils
sudo htpasswd -c /etc/nginx/.htpasswd userName

Ahora visita esta ubicación

/etc/nginx/sites-available/

Use estos códigos para proteger la carpeta "wp-admin" con una contraseña, ahora le preguntará a la contraseña/nombre de usuario si intentó acceder al "wp-admin". aviso, aquí se utiliza el ".htpasswd " archivo que contiene la contraseña cifrada.

location ^~ /wp-admin {
    auth_basic "Restricted";
    auth_basic_user_file /etc/nginx/.htpasswd;
    index  index.php index.html index.htm;
}

Ahora reinicie nginx.

sudo /etc/init.d/nginx restart
 6
Author: Liyanage,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-12 13:15:49

Órdenes:

chown www-data:www-data -R *
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;

Donde ftp-user es el usuario que está utilizando para cargar los archivos

chown -R ftp-user:www-data wp-content
chmod -R 775 wp-content
 3
Author: Iacob Vlad-George,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-06 11:24:36

No puedo decirte si esto es correcto o no, pero estoy usando una imagen Bitnami sobre Google Compute App Engine. He tenido problemas con los plugins y la migración, y después de estropear aún más las cosas por chmod'ing permisos, encontré estas tres líneas que resolvieron todos mis problemas. No estoy seguro de si es la forma correcta, pero funcionó para mí.

sudo chown -R bitnami:daemon /opt/bitnami/apps/wordpress/htdocs/
sudo find /opt/bitnami/apps/wordpress/htdocs/ -type f -exec chmod 664 {} \;
sudo find /opt/bitnami/apps/wordpress/htdocs/ -type d -exec chmod 775 {} \;
 1
Author: wayofthefuture,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-27 19:19:05

Para OS X use este comando:

sudo chown -R www:www /www/folder_name
 1
Author: Abduhafiz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-06 15:35:20

Para asegurarse absolutamente de que su sitio web es seguro y que está utilizando los permisos correctos para sus carpetas, utilice un plugin de seguridad como estos:

Https://en-ca.wordpress.org/plugins/all-in-one-wp-security-and-firewall /

Https://en-ca.wordpress.org/plugins/wordfence /

Estos complementos escanearán su instalación de Wordpress y le notificarán sobre cualquier problema potencial. Estos también le avisarán sobre cualquier permiso de carpeta inseguro. Además de que, estos plugins le recomendará qué permisos deben ser asignados a las carpetas.

 1
Author: user296526,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-14 15:39:36

Definir en el archivo wp_config.

/var/www/html/Your-Project-File/wp-config.php

define( 'FS_METHOD', 'direct' );

Chown - cambia la propiedad de los archivos/dirs. IE. el propietario del archivo/directorio cambia al especificado, pero no modifica los permisos.

sudo chown -R www-data:www-data /var/www
 1
Author: Harish Verma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-31 07:27:48
chown -Rv www-data:www-data
chmod -Rv 0755 wp-includes
chmod -Rv 0755 wp-admin/js
chmod -Rv 0755 wp-content/themes
chmod -Rv 0755 wp-content/plugins
chmod -Rv 0755 wp-admin
chmod -Rv 0755 wp-content
chmod -v 0644 wp-config.php
chmod -v 0644 wp-admin/index.php
chmod -v 0644 .htaccess
 0
Author: Grapehand,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-29 20:42:29

Basado en toda la lectura y agonía en mis propios sitios y después de haber sido hackeado he llegado a la lista anterior que incluye permisos para un plugin de seguridad para Wordpress llamado Wordfence. (No afiliado con él)

En nuestro ejemplo, la raíz del documento de wordpress es / var/www/html/example.com / public_html

Abra los permisos para que www-data pueda escribir en la raíz del documento de la siguiente manera:

cd /var/www/html/example.com
sudo chown -R www-data:www-data public_html/

Ahora desde el panel de control en su sitio, como administrador que puede realizar actualizaciones.

Sitio seguro después de que las actualizaciones finalicen siguiendo estos pasos:

sudo chown -R wp-user:wp-user public_html/

El comando anterior cambia los permisos de todo en la instalación de wordpress al usuario FTP de wordpress.

cd public_html/wp-content
sudo chown -R www-data:wp-user wflogs
sudo chown -R www-data:wp-user uploads

El comando anterior garantiza que el complemento de seguridad Wordfence tenga acceso a sus registros. El directorio uploads también es escribible por www-data.

cd plugins
sudo chown -R www-data:wp-user wordfence/

El comando anterior también garantiza que el complemento de seguridad ha requerido acceso de lectura y escritura para su correcto función.

Permisos de Directorio y Archivos # Establecer todos los permisos de directorios a 755 encontrar . - type d-exec chmod 755 {}\;

# Set all files permissions to 644
find . -type f -exec chmod 644 {} \;

Establece los permisos para wp-config.php a 640 para que solo el usuario wp pueda leer este archivo y nadie más. Los permisos de 440 no funcionaron para mí con la propiedad del archivo anterior.

sudo chmod 640 wp-config.php

Las actualizaciones automáticas de Wordpress usando SSH estaban trabajando con fine con PHP5 pero rompieron con PHP7.0 debido a problemas con php7. 0-ssh2 bundeld con Ubuntu 16.04 y No pude encontrar cómo instalar la versión correcta y hacer que funcione. Afortunadamente, un plugin muy confiable llamado ssh-sftp-updater-support (gratuito) hace que las actualizaciones automáticas usando SFTP sean posibles sin necesidad de libssh2. Por lo tanto, los permisos anteriores nunca tienen que aflojarse, excepto en casos raros, según sea necesario.

 0
Author: spinozarabel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-19 08:36:52