Permisos de carpeta / archivo de Magento 2

61

Sospecho que los permisos pueden haberse estropeado en mi instalación de Magento 2. En las versiones anteriores, ejecutaba el siguiente comando para crear carpetas 755 y archivos 644:

find . -type f -exec chmod -c 644 {} \; && find . -type d -exec chmod -c 755 {} \;

¿Puede decirme cuáles son los permisos correctos de archivos y carpetas para Magento 2, ya que parecen ser diferentes? Además, si hay algunas carpetas o archivos particulares que necesitarían permisos diferentes.

Neekoy
fuente
Pruebe el permiso 777 antes de realizar la copia de seguridad
Magento 2
El controlador PHP de mi servidor es suPHP y realmente no quiero asignar 777 a todo, ya que prácticamente abriría mi sitio web a cualquiera. ¿Hay permisos más específicos que se pueden asignar?
Neekoy
Magento tiene el permiso de archivo en carpetas para 775 y para el permiso de archivos establecido en 644
Rishabh Rk Rai
Para su información, si magento 2 está en un directorio "de inicio" var/cachey pub/staticnecesita establecer los bits suid. Yo solía: find var/cache -type d -print0 | xargs -0 sudo chmod 1775
Chris K

Respuestas:

118

puedes consultar http://devdocs.magento.com/

Las cosas importantes:

El propietario del sistema de archivos Magento: debe tener control total (lectura / escritura / ejecución) de todos los archivos y directorios.

No debe ser el usuario del servidor web; Debería ser un usuario diferente.

El usuario del servidor web debe tener acceso de escritura a los siguientes archivos y directorios: var app / etc pub (y probablemente nuevo en 2.2.1 :) generado

Además, el grupo del servidor web debe ser el propietario del sistema de archivos Magento para que el usuario de Magento (que está en el grupo) pueda compartir el acceso a los archivos con el usuario del servidor web. (Esto incluye archivos creados por el administrador de Magento u otras utilidades basadas en la web).

Recomendamos configurar los permisos de la siguiente manera:

All directories have 770 permissions.

770 permissions give full control (that is, read/write/execute) to the owner and to the group and no permissions to anyone else.

All files have 660 permissions.

660 permissions mean the owner and the group can read and write but other users have no permissions.

Debe establecer como se recomienda a continuación.

cd <your Magento install dir> 

find . -type f -exec chmod 644 {} \;                        // 644 permission for files

find . -type d -exec chmod 755 {} \;                        // 755 permission for directory 

find ./var -type d -exec chmod 777 {} \;                // 777 permission for var folder    

find ./pub/media -type d -exec chmod 777 {} \;

find ./pub/static -type d -exec chmod 777 {} \;

chmod 777 ./app/etc

chmod 644 ./app/etc/*.xml

chown -R :<web server group> .

chmod u+x bin/magento

Espero que esto ayude.

denish vachhani
fuente
3
Solo funciona para mí \;, por ejemplo:find ./var -type d -exec chmod 777 {} \;
bpoiss
1
Pero esto es para el modo de desarrollo. Para la producción debe ser de solo lectura grupal, no tengo idea de cómo debería funcionar
Alex
3
Creo que también necesitas chmod u+x bin/magentopoder ejecutar comandos de consola.
Volvox
42
amigos no dejen amigos 777
Darren Felton
66
app / etc 777> Jaja bonito. Hackable fácil. app / etc contiene su información de
base de
19

En algunos casos raros, no puede usar 770 y 660, como dice @MagenX, 755 y 644 también podrían ser el permiso que necesita. (Supongo que algunos usuarios de Fast-CGI)

Entonces, en ese caso, ejecutas:

find . -type d -exec chmod 755 {} \; && find . -type f -exec chmod 644 {} \; && chmod u+x bin/magento

Eso parece solucionarlo, pero si Magento genera nuevos archivos o directorios, tendrán los permisos 770 y 660 nuevamente. Puede editar esos valores chmod predeterminados en los siguientes archivos:

/vendor/magento/framework/Filesystem/DriverInterface.php 
(WRITEABLE_DIRECTORY_MODE and WRITEABLE_FILE_MODE)

/lib/internal/Cm/Cache/Backend/File.php 
(directory_mode and file_mode)

Después de estos cambios, ejecute el primer comando nuevamente y luego, los archivos recién generados ya no deberían ser un problema.

Nota: Editar archivos como este nunca es una buena idea, pero sospecho que estas opciones de chmod serán configurables en el futuro, así que tomé el camino fácil.

Daniel van der Garde
fuente
1
No puedo encontrar /lib/internal/Cm/Cache/Backend/File.php en M231
snh_nl
@snh_nl En la versión más reciente de Magento, ya no establecen el permiso si lo hacen, parece que usan 775. Después de una nueva instalación, puedes ejecutar: find. -tipo f -exec chmod 664 {} \; encontrar . -tipo d -exec chmod 775 {} \; encontrar ./var -tipo d -exec chmod 777 {} \; encontrar ./pub/media -type d -exec chmod 777 {} \; encontrar ./pub/static -type d -exec chmod 777 {} \; chmod 777 ./app/etc chmod 644 ./app/etc/*.xml chmod u + x bin / magento En la raíz y debería estar bien.
Daniel van der Garde
11

Puede usar el método que la documentación de Magento recomienda:

find . -type f -exec chmod 664 {} \;
find . -type d -exec chmod 775 {} \;
find var pub/static pub/media app/etc -type f -exec chmod g+w {} \;
find var pub/static pub/media app/etc -type d -exec chmod g+ws {} \;
chmod u+x bin/magento
Rafael Corrêa Gomes
fuente
¿Cómo dar permiso de escritura a la carpeta generada en Windows? @Rafael Corrêa Gomes
zus
8
sudo find . -type d -exec chmod 770 {} \; && sudo find . -type f -exec chmod 660 {} \; && sudo chmod u+x bin/magento

Para el conjunto de desarrollo local puby varpara 775 o 777

Ethan L.
fuente
¿por qué? (Hay una longitud mínima para un comentario)
vitoriodachef
7

Si está utilizando SELinux ̣ (por ejemplo, CentOS) intente:

sudo chcon -R -t httpd_sys_rw_content_t var

(desde la carpeta raíz de magento, por supuesto)

HausO
fuente
6

En Magento Community recomendamos

Recomendamos configurar los permisos de la siguiente manera:

Todos los directorios tienen permisos 770 . Los permisos 770 otorgan control total (es decir, lectura / escritura / ejecución) al propietario y al grupo y ningún permiso a nadie más.

Todos los archivos tienen 660 permisos. Los permisos 660 significan que el propietario y el grupo pueden leer y escribir, pero otros usuarios no tienen permisos.

Para obtener más información, consulte este enlace https://devdocs.magento.com/guides/v2.3/install-gde/prereq/file-system-perms.html

Magento 2
fuente
4

Ponga este contenido dentro de su carpeta raíz, luego ejecútelo con la consola.

No te olvides de hacerlo chmod +x yourfile.sh.

#!/bin/sh
chmod 2775 -R .

chmod 777 -R ./pub/

chmod 777 -R ./var/
Sheshgiri Anvekar
fuente
¿Cómo puedo poner este código? como htacces o archivo php
matinict
Evite esto, básicamente está haciendo que su directorio de servidor web esté abierto al público. en su lugar, lea los devdocs proporcionados por magento para asegurar adecuadamente la versión que está ejecutando.
themanwhoknowstheman
4

sin permisos especiales, solo asegúrese de que los archivos propiedad del usuario que ejecuta php o en el caso de cPanel - cpanel user, y el mismo grupo

entonces tu comando es bueno:

find . -type f -exec chmod -c 644 {} \; && find . -type d -exec chmod -c 755 {} \;

solo actualiza el propietario de los archivos:

chown -R user:user *

¿Dónde userestá el propietario, userque ejecuta PHP?

en lugar de cambiar los permisos cada vez, inicie sesión / trabaje como usuario adecuado, propietario de los archivos, de raíz a usuario:

cd /magento/root/folder/
su $(stat -c '%U' index.php) -s /bin/bash
whoami
pwd
MagenX
fuente
¿Cómo dar permiso de escritura a la carpeta generada en Windows? @MagenX
zus
3
find . -type f -exec chmod 400 {} \;
find . -type d -exec chmod 500 {} \;
find var/ -type f -exec chmod 600 {} \;
find media/ -type f -exec chmod 600 {} \;
find var/ -type d -exec chmod 700 {} \;
find media/ -type d -exec chmod 700 {} \;
chmod 700 includes
chmod 600 includes/config.php

También hay información detallada disponible en http://devdocs.magento.com/guides/m1x/install/installer-privileges_after.html

Rushvi
fuente
55
Las preguntas requieren asesoramiento sobre Magento 2
Flipmedia
0

Resolví de esta manera CentOS Linux 7.4.1708 en Plesk Onyx 17.8.11

find . -type f -exec chmod 644 {} \; &&  find . -type d -exec chmod 755 {} \; && find ./var -type d -exec chmod 777 {} \; && find ./pub/media -type d -exec chmod 777 {} \; && find ./pub/static -type d -exec chmod 777 {} \; && chmod 777 ./app/etc  && chmod 644 ./app/etc/*.xml

chown -R :<web server group> .
Altravista
fuente
Debe evitar usar 777 en archivos y directorios. Abre su tienda a riesgos de seguridad innecesarios. En cambio, lea los documentos proporcionados por magento para la versión que está ejecutando.
themanwhoknowstheman
0

Ejecute estos comandos como usuario root. Si ya le ha dado permiso al 777, revíselo utilizando los dos primeros comandos; de lo contrario, continúe con el resto.

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

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

find var generated vendor pub/static pub/media app/etc -type f -exec chmod g+w {} +

find var generated vendor pub/static pub/media app/etc -type d -exec chmod g+ws {} +

Establezca la propiedad para el usuario Magento y el usuario web utilizando

sudo chown -R <Magento user>:<web server group> .

La ejecución de estos comandos establece el permiso para carpetas y archivos en la raíz de Magento y para que los nuevos archivos se creen en var, pub y directorios generados.

No ejecute ningún comando como usuario root, ya que podría crear los nuevos archivos estáticos con propiedad de root, lo que podría impedir que el usuario web acceda a dichos archivos, lo que le obligará a proporcionar el permiso 777. En cualquier caso, no otorgue permiso 777 si así que por favor revísela. Entonces ejecute los comandos de Magento como usuario de Magento .

Raj Mohan R
fuente