Установка или исправление разрешений файлов¶
Одним важным требованием Symfony является то, что каталог var
должен быть
перезаписываемый как веб-сервером, так и ползователем командной строки.
В системах Linux и macOS, если пользователь вашего веб-сервера отличается от вашего пользователя командной строки, вам нужно правильно сконфигурировать разрешения, чтобы избежать проблем. Существует несколько способов достичь этого:
1. Использование одного пользователя для командной строки и веб-сервера¶
Редактируйте конфигурацию вашего веб-сервера (обычно httpd.conf
или apache2.conf
для Apache) и установите её ползователя так, чтобы он совпадал с вашим пользователем
командной строки (например, для Apache, обновите директивы User
и Group
).
Caution
Если это решение используется на сервере производства, убедитесь в том, что этот пользователь имеет только лимитированные привелегии (и не имеет доступа к приватным данным или серверам, выполнению небезопасных бинарных кодов и др.), так как скомпроментированные сервер предоставит хакеру такие привелегии.
2. Использование ACL в системе, поддерживающей chmod +a
(macOS)¶
В системах macOS, команда chmod``поддерживает флаг ``+a
для определения ACL.
Используйте следующий скрипт, чтобы определить пользователя вашего веб-сервера и
предоставить ему необходимые разрешения:
1 2 3 4 5 6 | $ rm -rf var/cache/*
$ rm -rf var/logs/*
$ HTTPDUSER=$(ps axo user,comm | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1)
$ sudo chmod +a "$HTTPDUSER allow delete,write,append,file_inherit,directory_inherit" var
$ sudo chmod +a "$(whoami) allow delete,write,append,file_inherit,directory_inherit" var
|
3. Использование ACL в системе, поддерживающей setfacl
(Linux/BSD)¶
Большинство дистрибутивов Linux и BSD не поддерживают chmod +a
, однако
поддерживают другую утилиту под названием setfacl
. Вам может понадобиться
установить setfacl
и включить поддержку ACL в вашем разделе диска до того,
как его использовать. Потом, используйте следующий скрипт, чтобы определить пользователя
вашего веб-сервера и предоставить ему необходимые разрешения:
1 2 3 4 | $ HTTPDUSER=$(ps axo user,comm | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1)
# if this doesn't work, try adding `-n` option
$ sudo setfacl -dR -m u:"$HTTPDUSER":rwX -m u:$(whoami):rwX var
$ sudo setfacl -R -m u:"$HTTPDUSER":rwX -m u:$(whoami):rwX var
|
Note
Первая команда setfacl
устанавливает разрешения в существующих файлах и папках,
в то время как вторая - в будущих файлах и папках. Обе эти команды назначают
разрешения для пользователя системы и пользователя Apache.
setfacl
недоступна в монтаже NFS. Однако, хранение кеша и записей логов в NFS
очень порицается по причинам производительности.
4. Без использования ACL¶
Если ни один из предыдущих методов для вас не работает, измените umask так,
чтобы каталоги кеша и логов имели возможность быть перезаписанными группами или
миром (в зависимости от того, находятся ли пользователь веб-сервера и пользователь
командной строки в одной группе, или нет). Чтобы достичь эого, пометите следующую
строку в начале файлов bin/console
, web/app.php
и web/app_dev.php
:
umask(0002); // This will let the permissions be 0775
// or
umask(0000); // This will let the permissions be 0777
Note
Изменение umask не ориентировано на многопоточное изменение, поэтому рекомендуются ACL-методы в случае, если они доступны.
Эта документация является переводом официальной документации Symfony и предоставляется по свободной лицензии CC BY-SA 3.0.