Права доступа к папке / файлу в Magento 2

61

Я подозреваю, что разрешения могли быть испорчены на моей установке Magento 2. В старых версиях я выполнял следующую команду, чтобы сделать папки 755 и файлы 644:

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

Не могли бы вы сообщить мне, какие права доступа к файлам и папкам у Magento 2, поскольку они кажутся разными? Также, если есть какие-то конкретные папки или файлы, для которых потребуются разные разрешения.

Neekoy
источник
Попробуй 777 Разрешений, перед этим сделай бекап
Magento 2
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
Крис К

Ответы:

118

вы можете сослаться на http://devdocs.magento.com/

Важные вещи:

Владелец файловой системы Magento: должен иметь полный контроль (чтение / запись / выполнение) всех файлов и каталогов.

Не должен быть пользователем веб-сервера; это должен быть другой пользователь.

Пользователь веб-сервера должен иметь права на запись в следующие файлы и каталоги: var app / etc pub (и, вероятно, новый в 2.2.1 :).

Кроме того, группа веб-сервера должна владеть файловой системой Magento, чтобы пользователь Magento (находящийся в группе) мог делиться доступом к файлам с пользователем веб-сервера. (Сюда входят файлы, созданные администратором Magento или другими сетевыми утилитами.)

Мы рекомендуем установить разрешения следующим образом:

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 {} \;
bpoiss
1
Но это для режима разработки. Для производства это должно быть только для группового чтения - не знаю, как это должно работать
Alex
3
Я думаю, что вы также должны chmod u+x bin/magentoиметь возможность выполнять консольные команды.
Volvox
43
друзья не пускают друзей 777
Даррен Фелтон
6
app / etc 777> Ха-ха, приятно. Взломать легко. Приложение / etc содержит информацию о
вашей базе
19

В некоторых редких случаях вы не можете использовать 770 и 660, как говорит @MagenX, 755 и 644 также могут быть необходимыми разрешениями. (Некоторые пользователи Fast-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
Не могу найти /lib/internal/Cm/Cache/Backend/File.php на M231
snh_nl
@snh_nl В более новой версии Magento они больше не устанавливают права, если они это делают, похоже, они используют 775. После новой установки вы можете просто запустить: find. -тип f -exec chmod 664 {} \; находить . -тип d -exec chmod 775 {} \; найти ./var -type d -exec chmod 777 {} \; найти ./pub/media -type d -exec chmod 777 {} \; find ./pub/static -type d -exec chmod 777 {} \; chmod 777 ./app/etc chmod 644 ./app/etc/*.xml chmod u + x bin / magento В корне и у вас все должно быть хорошо.
Даниэль ван дер Гарде
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? @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

Для локального развития установлен pubи varдо 775 или 777

Этан Л.
источник
Почему? (Длина комментария минимальна)
vitoriodachef
7

Если вы используете SELinux ̣ (например, CentOS), попробуйте:

sudo chcon -R -t httpd_sys_rw_content_t var

(из корневой папки magento конечно)

HausO
источник
6

В Magento Community рекомендую

Мы рекомендуем установить разрешения следующим образом:

Все каталоги имеют 770 разрешений. 770 разрешений дают полный контроль (то есть чтение / запись / выполнение) владельцу и группе, и никаких разрешений никому другому.

Все файлы имеют 660 разрешений. 660 разрешений означают, что владелец и группа могут читать и писать, но другие пользователи не имеют разрешений.

Для получения дополнительной ссылки по этой ссылке https://devdocs.magento.com/guides/v2.3/install-gde/prereq/file-system-perms.html

Magento 2
источник
4

Аналогичная проблема также для совместного использования хостинга:
Magento 2: Рекомендуемое разрешение для файлов для общего хостинга

devdocs magento для разрешений:
http://devdocs.magento.com/guides/v2.0/install-gde/prereq/file-system-perms.html
и для prod:
http://devdocs.magento.com/guides/ v2.0 / конфиг-гид / прод / prod_file-SYS-perms.html

Конрад Сиамро
источник
4

Поместите этот контент в корневую папку, затем запустите его с помощью консоли.

Не забудьте chmod +x yourfile.sh.

#!/bin/sh
chmod 2775 -R .

chmod 777 -R ./pub/

chmod 777 -R ./var/
Шешгири Анвекар
источник
как я могу поставить этот код? в виде htacces или php файла
matinict
Избегайте этого, это в основном делает ваш каталог веб-сервера открытым для общественности. вместо этого прочтите devdocs, предоставленные magento, чтобы должным образом защитить версию, которую вы используете.
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
MagenX
источник
Как дать разрешение на запись в сгенерированную папку в 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

Также подробная информация доступна по адресу http://devdocs.magento.com/guides/m1x/install/installer-privileges_after.html.

Rushvi
источник
5
Вопрос требует
совета
0

я решил таким образом для CentOS Linux 7.4.1708 на 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
источник
Вы должны избегать использования 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 и веб-пользователя, используя

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

Выполнение этих команд устанавливает права для папок и файлов в корне Magento и для новых файлов, которые будут созданы в var, pub и сгенерированных каталогах.

Не запускайте команды от имени пользователя root, так как это может вызвать появление новых статических файлов. с правами суперпользователя, что может помешать веб-пользователю получить доступ к таким файлам, заставляя вас предоставить разрешение 777. Пожалуйста, в любом случае не предоставляйте разрешение 777, если поэтому, пожалуйста, верните его обратно. Так что запускайте команды Magento как пользователь Magento .

Радж Мохан Р
источник