permissões de dados www?

108

Portanto, tenho um diretório em / var / www (chamado cake) e preciso permitir que os dados www para escrever nele, mas também quero escrever nele (sem precisar usar o sudo). Tenho medo de alterar as permissões para 777 no caso de algum outro usuário em minha máquina (ou um hacker) tentar modificar os arquivos nesse diretório. Como posso permitir acesso apenas para mim e os dados www do Apache?

q3d
fonte

Respostas:

168
sudo chown -R yourname:www-data cake

então

sudo chmod -R g+s cake

O primeiro comando muda o proprietário e o grupo.

O segundo comando adiciona o atributo s que manterá novos arquivos e diretórios dentro do cake com as mesmas permissões de grupo.

James L.
fonte
3
Por que o chmod g + s é recursivo?
Ben Rogmans
não sabia sobre g + s. muito, muito útil!
FRAGA de
1
o que o usuário pode fazer com arquivos criados por www-data no próprio cake, e arquivos criados por www-data em um diretório que é criado por www-data? por exemplo, sobre editar, renomear, excluir operações? pelo que entendi, renomear e excluir não são possíveis dentro do diretório criado por www-data, e a edição de arquivos criados por www-data não é possível para o usuário.
qdinar
49

Conforme afirmado em um artigo da Slicehost :

Configuração do usuário

Então, vamos começar adicionando o usuário principal ao grupo de usuários do Apache:

sudo usermod -a -G www-data demo

Isso adiciona o usuário 'demo' ao grupo 'www-data'. Certifique-se de usar as opções -a e -G com o comando usermod mostrado acima.

Você precisará fazer logout e login novamente para habilitar a mudança de grupo.

Verifique os grupos agora:

groups
...
# demo www-data

Portanto, agora sou membro de dois grupos: My own (demo) e o grupo Apache (www-data).

Configuração de pasta

Agora precisamos garantir que a pasta public_html pertence ao usuário principal (demo) e faz parte do grupo Apache (www-data).

Vamos configurar isso:

sudo chgrp -R www-data /home/demo/public_html

Já que estamos falando sobre permissões, acrescentarei uma nota rápida sobre o comando sudo: É um bom hábito usar caminhos absolutos (/ home / demo / public_html) como mostrado acima em vez de caminhos relativos (~ / public_html). Ele garante que o sudo esteja sendo usado no local correto.

Se você tiver uma pasta public_html com links simbólicos, tome cuidado com esse comando, pois ele seguirá os links simbólicos. Nos casos de uma pasta public_html funcional, altere cada pasta manualmente.

Setgid

Bom até agora, mas lembre-se que o comando que acabamos de dar afeta apenas as pastas existentes. Que tal algo novo?

Podemos definir a propriedade para que qualquer coisa nova também esteja no grupo 'www-data'.

O primeiro comando mudará as permissões do diretório public_html para incluir o bit "setgid":

sudo chmod 2750 /home/demo/public_html

Isso irá garantir que quaisquer novos arquivos recebam o grupo 'www-data'. Se você tiver subdiretórios, você desejará executar esse comando para cada subdiretório (este tipo de permissão não funciona com '-R'). Felizmente, novos subdiretórios serão criados com o bit 'setgid' definido automaticamente.

Se precisarmos permitir acesso de gravação ao Apache, a um diretório de uploads, por exemplo, defina as permissões para esse diretório da seguinte forma:

sudo chmod 2770 /home/demo/public_html/domain1.com/public/uploads

As permissões só precisam ser definidas uma vez, pois os novos arquivos receberão automaticamente a propriedade correta.

Kwadz
fonte
Esta solução funciona para mim. Antes disso, sempre executo o servidor do terminal usando o usuário root. Com esta solução, posso carregar o arquivo para o diretório que tem permissão 770. Isso é incrível, porque antes eu só conseguia fazer upload do arquivo usando a permissão 777.
Ifan Iqbal