Resolvendo erro de permissão de escrita "misterioso" no linux
Postado por Tiago Gouvêa em 22.08.2010
Mensagens de erro:
Permissão de escrita na pasta cache do symphony - “Failed to make cache directory” - sfConfigCache.class.php:340
“Failed to make cache directory /var/www/cache while generating cache for configuration file”
Estes dias precisei configurar um sistema utilizando symfony, em um servidor apache rodando sob o Fedora 13. Após colocar todos os arquivos nos devidos lugares e executar symfony Project:permissions, continuei não tendo permissão de escrita na pasta de cache. Mesmo a pasta estando com permissão 775 o apache não conseguia gravar no cache.
O Symfony executa um mkdir recursivo para criar todas as pastas dentro de cache que ele necessita. Portanto, a única possibilidade deste comando falhar “seria” o apache não ter permissão na pasta.
No caso “tradicional” a maneira correta seria dar permissão 775 na pasta cache (supondo que seja /var/www/cache/):
Chmod 775 /var/www/cachê/
Porém isso não resolveu no meu caso, mesmo com 777 continuava me retornado não ter permissão de escrita. Interessante observar que quando executa um script php diretamente pelo Shell, as pastas internas do cache eram criadas normalmente pelo symfony. Porém, ao abrir o mesmo script via browser o symfony não tinha mais permissão de escrita nas pastas. Fiquei com a pulga atrás da orelha.
Quando se executa um script php diretamente pelo Shell, o apache não é utilizado, com isso podemos concluir que a falha era a permissão do apache na pasta. Uma alternativa nestes casos “seria” dar propriedade para o usuário do apache (parâmetros user e grop em httpd.conf) ou torna-lo o proprietário da pasta (solução feia). Mas isso também não resolveu no meu caso.
Finalmente, a questão era o
SELinux que quando ativado, por padrão só dá permissões de escrita para o apache dentro do document_root. Para dar a permissão necessária:
chcon -R -t httpd_sys_content_t public_beta
Com isso tudo se resolveu e o apache conseguiu enfim escrever na pasta, como era esperado. Outra alternativa, claro, é desativar o
SELinux.