Подтвердить что ты не робот

Разрешения на Symfony2

Этот вопрос задавался несколько раз, но ни одно из решений не устраняет его в моей ситуации.

Я запускаю Apache на Mac OSX Lion. Этот URL http://localhost/Symfony/web/config.php запускает две основные проблемы:

Change the permissions of the "app/cache/" directory so that the web server can write into it.
Change the permissions of the "app/logs/" directory so that the web server can write into it.

Следуя руководству в разделе "Настройка разрешений":

rm -rf app/cache/*
rm -rf app/logs/*
sudo chmod +a "_www allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
sudo chmod +a "`whoami` allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs

Это не решает проблемы, поэтому я попытался:

sudo chmod -R 777 app/cache

Это тоже не работает. Любые идеи, как это исправить?

4b9b3361

Ответ 1

Некоторые предварительные объяснения:

  • Чтобы повысить производительность вашего веб-сайта, Symfony2 необходимо кэшировать большое количество данных, и это делается путем записи скомпилированных файлов в каталог app/cache.
  • Чтобы предложить мощные средства для отладки и мониторинга, Symfony2 должен отслеживать поведение вашего сайта, и он делает это, записывая файлы трассировки в ваш каталог app/logs.

Несколько слов об Apache:

  • Apache работает под определенным user и конкретным group (обычно www-data для обоих, но вы должны проверить свою установку, чтобы найти используемые. Например, если вы выполняете поиск в /etc/apache2/envvars в Linux, у вас будут две переменные APACHE_RUN_USER=www-data и APACHE_RUN_GROUP=www-data).
  • Это означает, что когда вы создаете свой сайт на плечах Symfony2 и запускаете его под Apache, каждая запись и чтение выполняются от имени Apache user и group.

Анализ ваших проблем:

  • Прежде всего, у вас есть такие ошибки, как:

    Change the permissions of the "app/cache/" directory so that the web server can write into it.
    Change the permissions of the "app/logs/" directory so that the web server can write into it.
    

    потому что ваши папки app/cache и app/logs недоступны для записи в Apache user и group.

  • Во-вторых, выполнив:

    sudo chmod +a "_www allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
    sudo chmod +a "`whoami` allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
    

    вы изменяете список контроля доступа (ACL) в папках app/cache и app/logs, чтобы предоставить некоторые разрешения whoami (в основном вы) и _www. Этот подход не работает и может иметь два источника:

    • Вы изменяете списки ACL, но настроено ли ваше ядро ​​и ваша файловая система для учета ACL?

    • Вы предоставляете некоторые разрешения для whoami и _www, но проверили ли вы, что ваш экземпляр Apache работает под одним из этих пользователей?

  • В-третьих, ваши коллеги решают проблему, выполняя:

    sudo chmod -R 777 app/cache 
    

    Этот подход работает по двум причинам:

    • Вы даете все разрешения (чтение и запись) каждому пользователю вашей системы (777), поэтому вы уверены, что по крайней мере у вашего пользователя и группы Apache также есть необходимые разрешения для записи в app/cache.
    • Вы делаете это рекурсивно (-R), поэтому все вложенные папки, созданные в каталоге app/cache, также связаны с новыми разрешениями.

Простое решение:

  • Удалите содержимое ваших папок app/cache и app/logs:

    rm -rf app/cache/*
    rm -rf app/logs/*
    
  • Предоставьте все разрешения (чтение и запись) в папки app/cache и app/logs:

    chmod 777 app/cache
    chmod 777 app/logs
    

Примечания:

  • Существуют и другие решения (с большим трудом), такие как предоставление разрешения конкретному пользователю и группе Apache и использование ACL для точной настройки.

Ответ 2

руководство в разделе "Настройка разрешений" говорит, что если ваша система не поддерживает chmod + a, вы должны это сделать:

HTTPDUSER=`ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\  -f1`

sudo setfacl -R -m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX app/cache app/logs
sudo setfacl -dR -m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX app/cache app/logs

Если это не работает, попробуйте это:

umask(0002); // This will let the permissions be 0775

// or

umask(0000); // This will let the permissions be 0777

Первое решение сработало для меня. Я надеюсь, что это поможет кому-то с тем же типом проблемы.

Ответ 4

Принятый ответ, однако, отличный, в моем случае (Centos 7 и Symfony 4.3) даже после установки разрешений я все еще получал ошибку. Оказывается, SELinux блокировал Apache. Следующее сработало для меня (измените my-project на вашу папку установки Symfony).

sudo chcon -R -t httpd_sys_script_rw_t /var/www/my-project/var/cache/
sudo chcon -R -t httpd_sys_script_rw_t /var/www/my-project/var/log/

Вы также можете отключить SELinux, но только временно для текущего сеанса, чтобы изолировать проблему (я не рекомендую это для prod)

sudo setenforce 0

кредиты