Права доступа¶
В зависимости от окружения хостинга права доступа могут быть или не быть проблемой, о которой стоит беспокоиться. Важно понимать, что потенциальная проблема есть, если пользователь, от имени которого вы редактируете файлы в файловой системе, отличается от пользователя, под которым работает PHP (обычно это веб-сервер), или, по крайней мере, у этих двух пользователей нет доступа на чтение и запись к этим файлам.
Сначала выясните, под каким пользователем работает Apache или Nginx, выполнив команду Для Apache:
ps aux | grep -v root | grep apache | cut -d\ -f1 | sort | uniq
Для Nginx:
ps aux | grep -v root | grep nginx | cut -d\ -f1 | sort | uniq
И выясните, какому пользователю принадлежат файлы в папке Grav, выполнив
ls -l
Будучи файловой CMS, Grav должен записывать данные в файловую систему, чтобы создавать кэш и файлы журналов. Есть три основных сценария:
-
PHP/веб-сервер работает под тем же пользователем, что редактирует файлы. (Предпочтительно)¶
Этот подход используется в большинстве конфигураций общего хостинга и хорошо работает при локальной разработке. В нашей записи блога о MacOS Yosemite, Apache и PHP описано, как настроить Apache, чтобы он работал под вашей личной учётной записью. Этот подход считается недостаточно безопасным для выделенного веб-хоста, поэтому стоит использовать второй или третий вариант.
-
PHP/веб-сервер работает под разными учётными записями, но в одной группе¶
Если использовать общую группу для вашей учётной записи и учётной записи PHP/веб-сервера с правами
775и664, вы гарантируете, что, несмотря на две разные учётные записи, обе будут иметь доступ на чтение и запись к файлам. Ещё, вероятно, стоит задатьumask 0002в корне, чтобы новые файлы создавались с правильными правами. -
Разные учётные записи, права исправляются вручную¶
Последний подход — полностью разные учётные записи, и после редактирования вы просто обновляете владельца и права файлов, чтобы пользователь PHP/веб-сервера мог читать и записывать как нужно.
Для этого можно использовать простой shell-скрипт исправления прав:
Вы можете взять этот файл и отредактировать его под нужного пользователя и группу для вашей конфигурации. По сути, скрипт делает следующее:
- Меняет владельца текущей папки, всех файлов и подпапок на
joeblowиstaff. - Находит все файлы от текущей папки вглубь и ставит права
664:RWдля пользователя и группы иRдля остальных. - Находит все папки от текущей папки вглубь и ставит права
775:RWXдля пользователя и группы иRXдля остальных. - Устанавливает владельца всех папок, чтобы сохранять изменения пользователя и группы.
Права на папку кэша изображений¶
Если файлы изображений в папке кэша записываются с неверными правами, попробуйте задать в файле user/config/system.yaml,
если свойство images уже есть, просто добавьте cache_perms: '0775' в его конец.
Если это не помогло, создайте файл setup.php в корне Grav (там же, где index.php) и добавьте
в него.
Если файл setup.php уже есть, просто добавьте эту строку в начало. Этот файл обычно используется для настройки мультисайта, но поскольку он вызывается при каждом обращении к Grav, его можно применять и для других целей.
Совместный хостинг с сайтом WordPress¶
В целом Grav можно установить в папку верхнего уровня существующего сайта WordPress, и две CMS прекрасно уживутся. (Не забудьте задать Base Rewrite в htaccess папки Grav.) Если при работе с админкой и/или просмотре страниц Grav возникают ошибки прав доступа к файлам кэша, проверьте, установлен ли для этого сайта WordPress сервис WP-Engine. Если да, обратитесь в их поддержку, чтобы для папки Grav сделали исключение в их агрессивном сервисе распределённого кэширования.
Советы для SELinux¶
Если предложенное выше всё ещё не работает, выполните в корневой папке Grav
chcon -Rv system_u:object_r:httpd_sys_rw_content_t:s0 ./.
Источники: - https://unix.stackexchange.com/questions/337704/selinux-is-preventing-nginx-from-writing-via-php-fpm - https://github.com/getgrav/grav/issues/912#issuecomment-227627196 - http://stopdisablingselinux.com - http://stackoverflow.com/questions/28786047/failed-to-open-stream-on-file-put-contents-in-php-on-centos-7 - http://www.serverlab.ca/tutorials/linux/web-servers-linux/configuring-selinux-policies-for-apache-web-servers/