Resumo atualizado
O diretório / var / www pertence, o root:root
que significa que ninguém pode usá-lo e é totalmente inútil. Como todos queremos um servidor da Web que realmente funcione (e ninguém deve fazer login como "root"), precisamos corrigir isso.
Apenas duas entidades precisam de acesso.
PHP / Perl / Ruby / Python precisam de acesso às pastas e arquivos, pois eles criam muitos deles (ie
/uploads/
). Essas linguagens de script devem estar em execução no nginx ou no apache (ou mesmo em alguma outra coisa como o FastCGI for PHP).Os desenvolvedores
Como eles obtêm acesso? Eu sei que alguém, em algum lugar, já fez isso antes. No entanto, com muitos bilhões de sites por aí, você pensaria que haveria mais informações sobre esse tópico.
Eu sei que o 777 tem permissão total de leitura / gravação / execução para proprietário / grupo / outro. Portanto, isso não parece ser necessário , pois oferece permissões completas a usuários aleatórios.
Quais permissões precisam ser usadas /var/www
para que:
- Controle de fonte como git ou svn
- Usuários de um grupo como "sites" ( ou mesmo adicionados a "www-data" )
- Servidores como apache ou lighthttpd
- E PHP / Perl / Ruby
todos podem ler, criar e executar arquivos (e diretórios) lá?
Se eu estiver correto, os scripts Ruby e PHP não são "executados" diretamente - mas passados para um intérprete. Portanto, não há necessidade de executar permissão nos arquivos em /var/www
...? Portanto, parece que a permissão correta seria o chmod -R 1660
que tornaria
- todos os arquivos compartilháveis por essas quatro entidades
- todos os arquivos não executáveis por engano
- bloquear todo mundo do diretório completamente
- defina o modo de permissão como "fixo" para todos os arquivos futuros
Isso está correto?
Atualização 1: Acabei de perceber que arquivos e diretórios podem precisar de permissões diferentes - eu estava falando sobre os arquivos acima, então não tenho certeza de quais seriam as permissões do diretório.
Atualização 2: a estrutura das pastas /var/www
muda drasticamente, pois uma das quatro entidades acima sempre adiciona (e às vezes remove) pastas e subpastas com muitos níveis de profundidade. Eles também criam e removem arquivos aos quais as outras três entidades podem precisar de acesso de leitura / gravação. Portanto, as permissões precisam fazer as quatro coisas acima para arquivos e diretórios. Como nenhum deles deve precisar de permissão de execução (consulte a pergunta sobre ruby / php acima), eu assumiria que a rw-rw-r--
permissão seria tudo o que é necessário e completamente seguro, pois essas quatro entidades são executadas por pessoal confiável (consulte o item 2) e todos os outros usuários em o sistema só tem acesso de leitura.
Atualização 3: É para máquinas de desenvolvimento pessoal e servidores de empresas privadas. Nenhum "cliente da Web" aleatório como um host compartilhado.
Atualização 4: este artigo de slicehost parece ser o melhor para explicar o que é necessário para configurar permissões para sua pasta www. No entanto, não tenho certeza de qual usuário ou grupo apache / nginx com PHP OR svn / git é executado e como alterá-los.
Atualização 5: Eu acho que finalmente encontrei uma maneira de fazer tudo isso funcionar (resposta abaixo). No entanto, não sei se essa é a maneira correta e segura de fazer isso. Portanto, eu comecei uma recompensa. A pessoa que tem o melhor método de proteger e gerenciar o diretório www vence.