Magento 2文件夹/文件权限


61

我怀疑我的Magento 2安装上的权限可能被弄乱了。在旧版本上,我将运行以下命令来创建文件夹755和文件644:

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

您能否让我知道Magento 2的正确文件和文件夹权限是什么,因为它们似乎有所不同?另外,如果有一些特定的文件夹或文件需要不同的权限。


请先尝试777许可,然后再进行备份
Magento

我服务器的PHP处理程序是suPHP,我真的不想将777分配给所有内容,因为这实际上将向任何人开放我的网站。是否可以分配更具体的权限?
Neekoy

Magento将文件夹的文件权限设置为775,并将文件权限设置为644
Rishabh Rk Rai

仅供参考,如果magento 2在“主”目录中,var/cache并且pub/static需要设置suid位。我曾经用过: find var/cache -type d -print0 | xargs -0 sudo chmod 1775
克里斯·K

Answers:


117

您可以参考http://devdocs.magento.com/

重要的事情:

Magento文件系统的所有者:必须具有对所有文件和目录的完全控制(读取/写入/执行)。

不能是Web服务器用户;它应该是其他用户。

Web服务器用户必须对以下文件和目录具有写访问权:生成的var app / etc pub(可能是2.2.1的新内容)

此外,Web服务器的组必须拥有Magento文件系统,以便Magento用户(该组中的用户)可以与Web服务器用户共享对文件的访问权限。(这包括由Magento Admin或其他基于Web的实用程序创建的文件。)

我们建议如下设置权限:

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.

您应该按照以下建议设置。

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

我希望这能帮到您。


3
它仅对我\;find ./var -type d -exec chmod 777 {} \;
有用

1
但这是针对开发模式的。对于生产,它应该是组只读的-不知道它应该如何工作
Alex

3
我认为您还需要chmod u+x bin/magento能够执行控制台命令。
Volvox

42
朋友不要让朋友777
达伦·费尔顿

6
app / etc 777>哈哈,不错。容易破解。app / etc包含您的数据库信息
CompactCode

19

在极少数情况下,您不能使用770和660,如@MagenX所说,755和644也可能是您需要的权限。(我猜有些快速CGI用户)

因此,在这种情况下,您运行:

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

似乎可以解决此问题,但是如果Magento生成新文件或目录,则这些文件或目录将再次具有权限770和660。您可以在以下文件中编辑这些默认chmod值:

/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)

完成这些更改后,再次运行第一个命令,然后,新生成的文件不再是问题。

注意:像这样编辑文件绝不是一个好主意,但是我怀疑这些chmod选项将来会是可配置的,因此我采取了简单的方法。


1
无法在M231上找到/lib/internal/Cm/Cache/Backend/File.php
snh_nl

@snh_nl在较新的Magento版本中,他们不再设置权限,好像使用了775。全新安装后,您可以运行:find。-type f -exec chmod 664 {} \; 找 。-类型d -exec chmod 775 {} \; 查找./var -type d -exec chmod 777 {} \; 查找./pub/media -type d -exec chmod 777 {} \; 查找./pub/static -type d -exec chmod 777 {} \; chmod 777 ./app/etc chmod 644 ./app/etc/*.xml chmod u + x bin / magento在根目录中,您应该没事。
Daniel van der Garde

11

您可以使用Magento文档建议的方法:

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

如何授予Windows中生成的文件夹的写权限?@RafaelCorrêaGomes
zus

8
sudo find . -type d -exec chmod 770 {} \; && sudo find . -type f -exec chmod 660 {} \; && sudo chmod u+x bin/magento

适用于本地开发设置pub,适用var于775或777


为什么?(评论长度必须最小)
vitoriodachef

7

如果您使用的是SELinux̣(例如CentOS),请尝试:

sudo chcon -R -t httpd_sys_rw_content_t var

(当然是从magento根文件夹)




4

将此内容放在您的根文件夹中,然后使用控制台执行它。

不要忘记chmod +x yourfile.sh

#!/bin/sh
chmod 2775 -R .

chmod 777 -R ./pub/

chmod 777 -R ./var/

我该如何放置此代码?作为htacces或php文件
Matinict

避免这种情况,基本上是使您的Web服务器目录向公众开放。而是阅读magento提供的devdocs以正确保护您正在运行的版本。
–themanwhoknowstheman

4

没有特殊权限,您只需确保文件由运行php的用户拥有,或者如果使用cPanel-cpanel用户,并且属于同一组

所以你的命令很好:

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

只需更新文件所有者:

chown -R user:user *

user所有者在哪里,user运行php。

无需每次都更改权限,而是以root用户身份作为适当的用户,文件所有者登录/工作:

cd /magento/root/folder/
su $(stat -c '%U' index.php) -s /bin/bash
whoami
pwd

如何授予Windows中生成的文件夹的写权限?@MagenX
zus


0

我以这种方式为Plesk Onyx 17.8.11上的CentOS Linux 7.4.1708解决了

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> .

您应该避免在文件和目录上使用777。它使您的商店面临不必要的安全风险。相反,请阅读magento提供的有关所运行版本的文档。
–themanwhoknowstheman

0

以root用户身份执行这些命令。如果您已经授予777权限,请使用前两个命令将其还原,否则请继续其余的操作。

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 {} +

使用以下命令将所有权设置为Magento用户和Web用户

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

运行这些命令可设置Magento根目录中的文件夹和文件的权限,以及将在var,pub和生成的目录中创建的新文件的权限。

不要以root用户身份运行任何命令,因为这可能会导致以root所有权创建新的静态文件,这可能会阻止Web用户访问此类文件,从而迫使您提供777权限。在任何情况下,请勿授予777权限所以请还原它。以Magento用户身份运行Magento命令。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.