A maioria das respostas aqui não está escrita com a segurança em mente. É bom ter a sensação de que executar sudo
de cada vez não é muito inteligente. Se você cometer um erro de digitação (por exemplo, ( não execute ) sudo rm -rf / var/www/dir
), você poderá acabar com o sistema.
Nota: A partir do Apache 2.4.7 / Ubuntu 14.04, /var/www
foi movido para /var/www/html
Ajuste os comandos nesta resposta de acordo.
Veja:
-
Onde colocar meu site local começando com a versão 2.4.7 do apache2?
-
Por que o diretório apache2 www foi movido para / var / www / html?
Más ideias:
-
chmod 777
(sagarchalise) - permite que qualquer pessoa com acesso ao seu sistema grave nos diretórios e arquivos e, assim, permita que o intruso execute qualquer código sob owww-data
user -
chgrp -R www-data $HOME
(cob) - permite quewww-data
leia ou grave arquivos no diretório inicial. Isso não está mantendo em mente a regra de privilégio mínimo -
chown -R $USER:$USER /var/www
(kv1dr) - a menos que o mundo tenha permissões de leitura em/var/www
, o servidor Web em execução sobwww-data
não poderá ler (exibir) os arquivos. Se o arquivo for um documento HTML simples acessível ao público, talvez não seja um problema se o mundo puder ler o arquivo. Mas se o arquivo é um arquivo PHP contendo senhas, é.
OBSERVAÇÃO : nas soluções abaixo, concedi privilégios de gravação em www-data
. No entanto, /usr/share/doc/base-passwd/users-and-groups.txt.gz
declara:
www-data
Some web servers run as www-data. Web content should not be owned by this user, or a compromised web server would be able to rewrite a web site. Data written out by web servers will be owned by www-data.
Quando possível, não concede permissões de gravação ao grupo www-data
. O www-data
só precisa ser capaz de ler os arquivos para que o servidor da Web possa veiculá-lo. O único caso em que www-data
precisa de permissões de gravação é para diretórios que armazenam uploads e outros locais que precisam ser gravados.
Solução 1
Adicione-se ao grupo www-data
e defina o bit setgid no diretório /var/www
, de modo que todos os arquivos recém-criados também herdem esse grupo.
sudo gpasswd -a "$USER" www-data
Corrigir arquivos criados anteriormente (supondo que você seja o único usuário de /var/www
):
sudo chown -R "$USER":www-data /var/www
find /var/www -type f -exec chmod 0660 {} \;
sudo find /var/www -type d -exec chmod 2770 {} \;
(ainda mais seguro: use 640
ou 2750
e manualmente chmod g+w file-or-dir
que precisa ser gravável pelo servidor web)
Solução 2
Crie um symlink para cada projeto em seu diretório pessoal. Digamos que seu projeto está localizado em ~/projects/foo
e você deseja que ele esteja em /var/www/foo
, execute:
sudo ln -sT ~/projects/foo /var/www/foo
Se o seu diretório pessoal não tiver nenhum bit de execução (descer) definido para other
(por motivos de segurança), altere o grupo para www-data
, mas defina apenas o bit de execução (não ler escrever). Faça o mesmo com a pasta ~/projects
, pois ela pode conter outros projetos além de www. (Você não precisa de sudo
se já adicionou seu usuário ao grupo www-data
.)
sudo chgrp www-data ~ ~/projects
chmod 710 ~ ~/projects
Defina o grupo como www-data
on ~/projects/foo
e permita que o servidor da Web leia e grave em arquivos e arquivos + diretórios e desça aos diretórios:
sudo chgrp www-data ~/projects/foo
find ~/projects/foo -type f -exec chmod 660 {} \;
find ~/projects/foo -type d -exec chmod 2770 {} \;
Ainda mais seguro: use 640 e 2750 por padrão e arquivos chmod e diretórios manualmente que precisam ser gravados pelo usuário do servidor web. O bit setgid deve ser adicionado somente se você quiser que cada arquivo recém-criado em ~/projects/foo
seja acessível pelo grupo.
A partir de agora, você pode acessar seu site em http://localhost/foo
e editar seus arquivos de projeto em ~/projects/foo
.