Permisos de archivo correctos para WordPress [cerrado]

399

He echado un vistazo aquí, pero no encontré ningún detalle sobre los mejores permisos de archivo. También eché un vistazo a algunas de las preguntas del formulario de WordPress aquí, 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 contenido de WordPress
  2. wp-admin
  3. wp-content
  4. wp-incluye

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

John Crawford
fuente
Básicamente, solo la carpeta de carga de Wordpress debe ser 777, pero sería una seria amenaza de seguridad. Si utiliza un servidor con Suphp habilitado, no es necesario modificar los permisos manualmente.
Ali F
44
Estoy votando para cerrar esta pregunta como fuera de tema porque está fuera de tema según el extracto del wiki de la etiqueta: "Las preguntas fuera de tema incluyen aquellas sobre desarrollo de temas, administración de WordPress, mejores prácticas de administración, configuración del servidor, etc."
Adriaan

Respuestas:

499

Cuando configura WP, usted (el servidor web) puede necesitar acceso de escritura a los archivos. Por lo tanto, los derechos de acceso pueden necesitar ser flexibles.

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 Hardening WordPress, todos los archivos, excepto el contenido de wp, deben poder escribirse solo en su cuenta de usuario. wp-content también debe poder escribirse en www-data .

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 de wp-content más adelante. En este caso podrías

  • cambiar temporalmente al usuario a www-data con su,
  • dar acceso de escritura al grupo wp-content 775 y unirse al grupo www-data o
  • otorgue a su usuario los derechos de acceso a la carpeta mediante ACL .

Hagas lo que hagas, asegúrate de que los archivos tengan permisos rw para www-data .

ManuelSchneid3r
fuente
2
Kornel da uno de esos enlaces autorizados a continuación. Consulte también codex.wordpress.org/Changing_File_Permissions , el documento de Apache httpd.apache.org/docs/2.2/misc/security_tips.html , y prácticamente cualquier búsqueda de Google sobre el tema. Pero en el caso general, cuando tenga dudas, no otorgue acceso de escritura (y ciertamente no propiedad) y afloje caso por caso, no al contrario (principio de privilegio mínimo que está violando aquí).
Calimo
22
¿Por qué hay una función de actualización automática si ni siquiera funciona sin cambiar los permisos?
malhal
66
@ ManuelSchneid3r, veo algunos archivos PHP en wp-content, ¿se supone que estos realmente pueden ser escritos por www-data??? Eso realmente suena totalmente no seguro en absoluto.
Alexis Wilke
12
Esta solución evitará que Wordpress instale 'actualizaciones de seguridad automáticas'. Debe ejecutar manualmente los pasos anteriores para cada actualización menor de WordPress.
Jeroen
11
Esta no es una configuración segura. ¡Establecer permisos de lectura en estos archivos no tiene ningún efecto cuando el usuario de apache también posee los archivos! NO UTILICE. Consulte codex.wordpress.org/Changing_File_Permissions
PodTech.io
60

Dar acceso completo a todos los archivos wp al www-datausuario (que en este caso es el usuario del servidor web) puede ser peligroso. Entonces, NO hagas esto:

chown www-data:www-data -R *

Sin embargo, puede ser útil en el momento en que instala o actualiza WordPress y sus complementos. Pero cuando haya terminado, ya no es una buena idea mantener los archivos wp propiedad del servidor web.

Básicamente permite al servidor web colocar o sobrescribir cualquier archivo en su sitio web. Esto significa que existe la posibilidad de hacerse cargo de su sitio si alguien logra usar el servidor web (o un agujero de seguridad en algún script .php) para colocar algunos archivos en su sitio web.

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

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

/

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

/wp-admin/

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

/wp-includes/

La mayor parte de la lógica de la aplicación WordPress: todos los archivos deben poder escribirse solo en su cuenta de usuario.

/wp-content/

Contenido proporcionado por el usuario: destinado a que su cuenta de usuario y el proceso del servidor web puedan escribirlo.

Dentro de /wp-content/usted encontrará:

/wp-content/themes/

Archivos temáticos. Si desea utilizar el editor de temas incorporado, el proceso del servidor web debe poder escribir en todos los archivos. Si no desea utilizar el editor de temas incorporado, todos los archivos solo pueden ser editados por su cuenta de usuario.

/wp-content/plugins/

Archivos de complementos: todos los archivos deben ser editables solo por su cuenta de usuario.

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

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

Kornel
fuente
por su cuenta de usuario. significa el usuario que ejecuta los scripts php en el sitio (normalmente el usuario apache)?
shasi kanth
44
@shasikanth No, el usuario de apache es a quien se refiere como "proceso de servidor web". La cuenta de usuario es su usuario de Linux (ssh, usuario de ftp, etc.)
Daniel Bang
En esta respuesta y en la respuesta aceptada, ¿debería el usuario (no www-data) ser parte del grupo www-data?
user658182
1
No, ese es el punto.
Piotr Nawrot
1
El problema que tengo es que cada vez que hago que mi "usuario" de SSH sea el propietario de / wp-content / plugins /, Wordpress deja de funcionar por completo desde el administrador, con la rutina emergente FTP constante o errores de permisos. No se pueden agregar ni actualizar complementos. Solo cuando hago que www-data sea el propietario de wp-content, funciona la funcionalidad del complemento de administrador de Wordpress. (Ejemplo: sudo chown www-data: www-data -R / var / www / html / wp-content /)
Heres2u
26

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 Otorgar permisos de escritura al grupo www-data

Desea llamar usermoda su usuario. Entonces eso sería:

sudo usermod -aG www-data yourUserName

** Suponiendo que el www-datagrupo existe

  1. Comprueba que tu usuario está en el www-datagrupo:

    groups yourUserName

Deberías obtener algo como:

youUserName : youUserGroupName www-data

** youUserGroupName suele ser similar a su nombre de usuario

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

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

  2. Cambie 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 {} \;

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

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

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

El resultado debería ser similar a:

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 nombre de carpeta

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

Ps si alguien encuentra un error 'could not create directory'al actualizar un complemento, hazlo:
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.phptiene
credenciales FTP en LocalHost
define('FS_METHOD','direct');

Jadeye
fuente
10
-1. Usted NO quiere www-data para tener acceso de escritura a los archivos de WordPress, excepto en wp-content.
Calimo
775 en wp-content ayuda. Con 644 para archivos, 755 para carpetas y usuario conocido: www-data, a veces todavía tenía problemas con la carga de medios, la actualización de complementos, etc. 775 también permite que www-data altere el contenido de wp: www-data , que resuelve el problema.
guylabbe.ca
Elimine -R del comando find / chmod ya que es lento e innecesario.
Adam Jimenez
20

Lo mejor es leer la documentación de WordPress en este https://wordpress.org/support/article/changing-file-permissions/

  • Todos los archivos deben ser propiedad de la cuenta del usuario real, no de la cuenta de usuario utilizada para el proceso httpd
  • La propiedad del grupo es irrelevante, a menos que haya requisitos de grupo específicos para la verificació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 del servidor lo lean.
  • Ningún directorio debería recibir 777, incluso subir directorios. Dado que el proceso php se ejecuta como el propietario de los archivos, obtiene los permisos de los propietarios y puede escribir incluso en un directorio 755.
PodTech.io
fuente
44
No estoy seguro de por qué te votaron mal: ¡es casi como si la gente quisiera que la respuesta principal fuera cómo dejar insegura la instalación !
BCran
El enlace está desactualizado. uno nuevo aquí: wordpress.org/support/article/changing-file-permissions ¡ Y gracias por ser el único que hace referencia a los documentos reales!
Everyman
Si wp-config.php es 400, ¿cómo se supone que apache lo incluirá (por lo tanto, léalo) en la carga de la página?
Martin Braun
14

Establezco permisos para:

    # 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, creé un usuario específico para WordPress que es diferente del usuario predeterminado de apache que impide el acceso desde la web a los archivos que posee ese usuario.

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

EDITADO

Si está utilizando W3C Total Cache, también debe hacer lo siguiente:

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 funcionará!

EDITADO

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

En producción, no daría acceso a los usuarios para modificar el sistema de archivos, solo les permitiré cargar recursos y dar acceso a algunas carpetas específicas de complementos para hacer copias de seguridad, etc. Pero administrar proyectos bajo Git y usar las teclas de implementación en el servidor, no es bueno actualizar los complementos en la puesta en escena ni en la producción. Os dejo aquí la configuración del archivo de producción:

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

www-data: www-data = usuario y grupo apache o nginx

La puesta en escena compartirá los mismos permisos de producción, ya que debería ser un clon.

Finalmente, el entorno de desarrollo tendrá acceso para actualizar complementos, 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 = usuario apache o nginx y agrupa a tu usuario: root-group = tu usuario actual y el grupo raíz

Estos permisos le darán acceso para desarrollar bajo themesy your-plugincarpeta sin pedir permiso. El resto del contenido será propiedad del usuario de Apache o Nginx para permitir que WP administre el sistema de archivos.

Antes de crear un repositorio de git, primero ejecute 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 {} \;
Pablo Ezequiel Leone
fuente
11
Nooo! Nunca haga un 777. Por favor, no aconseje esto a las (nuevas) personas que lean esto.
Karlo
El proceso http no debe poseer archivos ni carpetas; esta es una brecha de seguridad importante. Si un usuario malintencionado encuentra un exploit en un plugin o tema o wordpress en sí mismo, puede cargar el código que luego puede ejecutar Apache y obtener acceso. Lo he visto de primera mano :(
DropHit
10

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

Para cambiar los permisos, use la terminal y los siguientes comandos.

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

755 para carpetas y 644 para archivos.

Kappa
fuente
1
y 640 para wp-config.php. Pero desafortunadamente, debe cambiar los permisos de las cargas y complementos y carpetas de temas a 775 y si desea actualizar su wordpress, entonces debe cambiar todas las carpetas a 775. En esta sección, sus permisos mostrarán errores mientras se actualiza. / cambio de complementos, temas y carga de medios.
erginduran
8

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

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

    Complementos chmod -R 0755

    chmod -R 0755 cargas

    Actualización de chmod -R 0755

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

    cargas de apache chown

    actualización de apache chown

    complementos de apache conocidos

shasi kanth
fuente
1
También puede establecer permisos de forma recursiva para los directorios, como: chown -R apache uploads . Y si es necesario, también puede otorgarle la propiedad del grupo a apache: chgrp apache
uploads
8

De hecho, 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 el usuario que esté usando) como usuario en cada archivo / carpeta, R significa recursivo, por lo que simplemente no se detiene en la carpeta "html". si no usó R, entonces solo se aplica al directorio "html".

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

Esto establecerá el propietario / grupo de "wp-content" en "www-data" y así permitirá que el servidor web instale los complementos 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 subdirectorios) en 644, por lo que las personas externas no pueden ejecutar ningún archivo, modificar ningún archivo, el grupo no puede ejecutar ningún archivo, modificar cualquier archivo y solo el usuario puede modificar / leer archivos, pero aun así el usuario no puede ejecutar ningún archivo. Esto es importante porque evita cualquier tipo de ejecución en la carpeta "html", ya que el propietario de la carpeta html y todas las demás carpetas excepto la carpeta wp-content son "root" (o su usuario), el www-data can ' t modifique cualquier 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 puede 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" al usuario / grupo con rw-r ----- estos permisos.

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

Y si un complemento o actualización se quejó de que no puede actualizarse, acceda al SSH y use este comando, y otorgue el permiso temporal a "www-data" (servidor web) para actualizar / instalar a través del panel de administración, y luego revertir volver a la "raíz" o su usuario una vez que se haya completado.

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

Y en Nginx (el mismo procedimiento para el apache) para proteger la carpeta wp-admin del acceso no autorizado y el sondeo. Apache2-utils es necesario para cifrar la contraseña incluso si tiene instalado nginx, 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 pedirá la contraseña / nombre de usuario si intentó acceder a "wp-admin". observe, aquí usa el archivo ".htpasswd" 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 el nginx.

sudo /etc/init.d/nginx restart
Don Dilanga
fuente
No se recomienda usar el usuario root. Podría ser más peligroso. Simplemente haga un nuevo usuario y agréguelo al grupo sudo
erginduran
No recomendé aquí usar la raíz. Usé la raíz como ejemplo. puede usar cualquier nombre en lugar de usar la raíz.
Don Dilanga
2

Comandos:

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

Donde ftp-user es qué usuario está utilizando para cargar los archivos

chown -R ftp-user:www-data wp-content
chmod -R 775 wp-content
Iacob Vlad-George
fuente
1
debería ser nombre de usuario chown: www-data, de lo contrario no podrá editar archivos
malhal 02 de
Puedes usar en $(whoami)lugar de ftp-user. De forma predeterminada, su usuario actual ( no root ) es su usuario FTP si está utilizando su propio servidor (local, vps, etc.)
Juanjo Salvador
2

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

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 posibles problemas. Estos también le advertirán sobre cualquier permiso de carpeta inseguro. Además de eso, estos complementos le recomendarán qué permisos deben asignarse a las carpetas.

usuario296526
fuente
2
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
Mano de uva
fuente
1

No puedo decirte si esto es correcto o no, pero estoy usando una imagen de Bitnami sobre Google Compute App Engine. Tengo problemas con los complementos y la migración, y después de desordenar aún más los cambios de 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 {} \;
camino del futuro
fuente
1

Para OS X use este comando:

sudo chown -R www:www /www/folder_name
Abduhafiz
fuente
1

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 / directorios. Es decir. el propietario del archivo / directorio cambia al especificado, pero no modifica los permisos.

sudo chown -R www-data:www-data /var/www
Harish Verma
fuente
0

Basado en toda la lectura y agonía en mis propios sitios y después de haber sido pirateado, he creado la lista anterior que incluye permisos para un complemento de seguridad para Wordpress llamado Wordfence. (No afiliado a ella)

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 su sitio, como administrador puede realizar actualizaciones.

Sitio seguro después de finalizar las actualizaciones 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 para el 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 de cargas también se puede escribir con www-data.

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

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

Permisos de directorio y archivos

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

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

Establezca los permisos para wp-config.php en 640 para que solo wp-user pueda leer este archivo y nadie más. Los permisos de 440 no me funcionaron con la propiedad del archivo anterior.

sudo chmod 640 wp-config.php

Las actualizaciones automáticas de Wordpress con SSH funcionaban bien 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 complemento muy confiable llamado ssh-sftp-Updater-support (gratuito) hace posible las actualizaciones automáticas usando SFTP sin necesidad de libssh2. Por lo tanto, los permisos anteriores nunca tienen que aflojarse, excepto en casos excepcionales, según sea necesario.

spinozarabel
fuente