Completarei as respostas de rahmu e MV com uma solução técnica. Tudo o que se segue é válido apenas para sistemas do tipo UNIX.
Role a seção chmod / chown para obter um exemplo usando ACLs - uma ferramenta mais poderosa que os modos de arquivo UNIX.
Localizando o Nome de Usuário do Servidor da Web
Primeiro, você precisará saber o nome de usuário sob o qual o servidor da web é executado. Se você estiver usando Apache, pode ser apache
ou httpd
, www-data
etc. Na maioria Debian-like sistemas, Apache é www-data
. Para nginx, geralmente, é também www-data
.
Para conferir, tente:
ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1
Certifique-se de que o nome de usuário que esse comando retorne seja coerente (por exemplo, eu uso o nginx 99% do tempo, mas esse comando retorna tomcat7
, um servidor da Web Java que instalei uma vez) .
Conceder permissões ao servidor da Web: usando chmod
echown
Fazer chmod
666 ou 777 (a solução ideal para esse tipo de problemas em documentações / tutoriais ruins) pode fazer magicamente as coisas funcionarem, mas é inseguro. A concessão de permissões 666 ou 777 dará acesso a "outros". Portanto, não apenas o Apache, mas também grandmother
e nsa
(desde que essas contas de usuário existam na sua máquina - mas na verdade não, evite fazer isso, a menos que seja apenas para teste / solução de problemas).
É melhor ser mais específico e conceder permissões apenas para você e o Apache. Altere o grupo dos seus arquivos para fornecer o controle total dos arquivos no servidor da web. Para fazer isso, altere o proprietário recursivamente:
chown -R www-data:www-data your/folder/
Mas o mais provável é que você queira manter acesso total aos seus arquivos alterando apenas o grupo:
chown -R yourusername:www-data your/folder/
Em seguida, faça o apropriado chmod
para conceder ao grupo www-data
as mesmas permissões que você. Por exemplo, se o modo atual for 640 (6 para você, 4 para www-data, 0 para outros, traduzindo para -rw-r -----) , configure-o para 660 (6 para você, 6 para www- dados, 0 para outros, traduzindo para -rw-rw ----) . Veja a resposta de rahmu para saber mais sobre os modos de arquivo, é um mecanismo antigo, porém elegante.
Para evitar manipular números misteriosos chmod
, você também pode usar esta sintaxe:
chmod -R g+rw your/folder/
Significa "para o grupo ( g
), adicione ( +
) permissões de leitura e gravação ( rw
) na pasta your/folder/
, recursivamente ( -R
)".
Em 90% dos casos, isso deve ser suficiente.
Meu método preferido: usando ACLs (lista de controle de acesso)
Às vezes, a primeira solução não é suficiente. Vou usar o exemplo do Symfony Framework que registra e armazena em cache muitos dados. Portanto, ele precisa de acesso de gravação à pasta apropriada.
E o método chmod
/ chown
pode não ser suficiente, quando você estiver usando em paralelo o Symfony Console na CLI (na minha conta de usuário) e a Web (usuário do servidor da web). Isso causa muitos problemas porque o Symfony está constantemente modificando as permissões.
Nesse caso, usaremos a ACL (Lista de controle de acesso), que é uma maneira mais avançada de gerenciar permissões em muitos sistemas UNIX.
Aqui estão os comandos fornecidos pela documentação oficial do Symfony ( altere app/cache
e de acordo app/logs
com as suas necessidades ):
Em um sistema que suporta chmod +a
(ie. Não Debian / Ubuntu)
sudo chmod +a "www-data 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
Em um sistema que não suporta chmod +a
(o mais comum)
Você precisará da setfacl
ferramenta; talvez ele esteja instalado no seu sistema por padrão, então tente setfacl -v
ver se o comando está disponível.
Se o comando não estiver disponível e você estiver usando o Ubuntu 14.04+, basta instalar a ferramenta:
sudo apt install acl
Caso contrário, siga a documentação do sistema operacional, pois pode ser necessário alterar a forma como sua partição é montada ( documentação do Ubuntu aqui ).
E aí estamos nós:
sudo setfacl -R -m u:"www-data":rwX -m u:`whoami`:rwX app/cache app/logs
sudo setfacl -dR -m u:"www-data":rwX -m u:`whoami`:rwX app/cache app/logs
Eu nunca tive problemas com esse método, satisfeito ou com seu dinheiro de volta.