Мне действительно интересно, как люди советуют делать chmod
или chown
, при этом не хватает подробностей настройки сервера OP.
Исходя из всего, что упомянуто до сих пор, я могу предположить , что у OP все работает так:
- NGINX работает как
www-data
.
- PHP-FPM работает под другим именем пользователя (таким образом, проблема с разрешениями). Допустим, имя пользователя пула PHP-FPM -
foo
.
Давайте наметим лучшие практики для такого рода установки. После этого вы будете в порядке, без проблем с разрешениями, в кратчайшие сроки.
Кто должен владеть файлами
Обычно (многосайтовый сервер или нет) вам нужен один конкретный пользователь, которому принадлежат файлы сайта. Этот пользователь должен никогда быть www-data
. Это должен быть отдельный пользователь, которого вы создали для этой цели: foo
.
Как правило, этот же пользователь foo
будет тем, кто настроен для запуска пула PHP-FPM.
Итак, установите правильное владение для пользователя foo
:
chown -R foo:foo /path/to/your/site/html
Поскольку сценарии PHP-FPM работают как foo
, теперь, когда каталог и все файлы внутри него принадлежат тому же foo
, PHP-FPM может выполнять свою работу там без каких-либо проблем. Таким образом, у вас никогда не будет даже возможности, что PHP не сможет создать / получить доступ к вещам.
Предоставить доступ к веб-серверу
Помните, что в настройке участвуют два пользователя: один - веб-сервер (www-data
), а другой - PHP-FPM (foo
).
Теперь, когда файлы должным образом принадлежат foo
, нам нужно предоставить права на чтение их www-data
. Почему только читать? Потому что NGINX не имеет ничего общего с записью в файловую систему в этой настройке. Нужно только читать файлы и просматривать каталоги.
Как правило, это предоставление выполняется путем назначения пользователя веб-сервера членом группы пользователей сайта . Сначала это немного сложно понять, но я буду более подробно об этом:
Допустим, есть файл сайта data.txt
, который теперь принадлежит foo:foo
- владение в Linux является двойным: файл принадлежит foo
пользователю и foo
группе.
В настоящее время в группе foo
есть только один участник: foo
пользователь.
Нам нужно добавить еще одного члена в группу foo
: пользователя www-data
.
Таким образом:
usermod -a -G foo www-data
После этого в группу foo
входят следующие члены: foo
пользователь, www-data
пользователь.
И теперь мы можем перейти к разрешениям:)
Какие разрешения должны быть
Теперь, когда мы закончили с владельцем, оставшимся важным битом является настройка разрешений для всех файлов и каталогов следующим образом:
- каталоги должны разрешать обход (
+x
) для группы
- файлы должны разрешать чтение (
+r
) для группы
Эти разрешения необходимы для www-data
, чтобы иметь возможность читать каждый файл и каталог веб-сайта.
Скорее всего, вам не нужно явно устанавливать их, потому что настройка umask
(я не буду касаться этой темы здесь) будет уже такой, что все файлы уже имеют эти разрешения.
Но если вам нужно починить вещи, вы можете сделать:
chmod -R g+rX /path/to/your/site/html
Прописные буквы X
гарантируют, что +x
установлен только для каталогов.
Идти в безопасности
После настройки правильного владельца файла и группы для этого вида настройки вы можете пойти дальше и установить более строгие ограничения chmod
.
Например, Magento secure chmod следует соглашениям этой установки, так что вы можете быть в порядке с chmod
разрешениями 0400
для файлов PHP и 0640
для медиафайлов:)
Последний бит chmod
должен всегда быть 0, если вы не имеете дело с действительно странным вариантом использования.