Não deve haver problemas com o conteúdo pertencente à raiz, desde que sejam legíveis pelo usuário do httpd.
O material do usuário deve estar abaixo de /srv
, não /var/www
. Eles podem possuir o código e os dados deles lá.
Para uma configuração simples de LAMP, qual é a maneira mais segura de lidar com a propriedade de arquivos do diretório / var / www (ou subdiretórios)?
O Apache é executado como www-data, portanto, se for o proprietário, ele terá acesso de gravação. Esta é provavelmente uma má ideia, no entanto, torna-se conveniente para uploads de arquivos.
Se eles forem de propriedade do root, há algum problema de segurança envolvido?
Faz sentido que cada usuário seja o proprietário de sua pasta / var / www / site? (Eu percebo que ~ / public_html é o caminho certo para fazer isso, no entanto, ter todo o conteúdo da web em / var / www / torna fácil ver quais sites estão atualmente em execução no servidor)
Não deve haver problemas com o conteúdo pertencente à raiz, desde que sejam legíveis pelo usuário do httpd.
O material do usuário deve estar abaixo de /srv
, não /var/www
. Eles podem possuir o código e os dados deles lá.
O seu nível de preocupação com a segurança depende se esta é a intranet ou a Internet (embora 'seguro na intranet' possa ser enganoso, dependendo do seu firewall e da segurança geral da rede).
Ter o usuário do apache tem acesso de gravação aos arquivos é ruim para a segurança. Se o servidor estiver enraizado, eles poderão alterar o conteúdo. É claro, você permitir uploads de arquivos sem verificação é um problema de segurança muito maior - não é necessário ter um buraco de apache. Você está melhor com o upload para algum diretório fora do servidor, espere para o veterinário, vá para a área do servidor web.
Se os arquivos forem de propriedade de root, apenas o usuário root poderá modificá-los. Isso significa que todos os processos que os modificam precisam ser o root, o que é uma preocupação de segurança. Você está disposto a dar root / sudo a todos os autores de conteúdo da web? Eu recomendaria contra isso.
Se possível, o apache e seus logs devem estar em um volume separado, pelo menos fora de / bin / e / var. Arquivos de registro overgrown ou arquivos carregados enormes podem causar Denial Of Service para seus sistemas OS - Linux agem de forma estranha com partições 100% full / var.
Se você estiver usando o LAMP completo com os usuários, precisará se preocupar com as habilidades de codificação de seus usuários. Torne o PHP seguro quanto possível (suspiro, porque não há uma linguagem melhor, o PHP é realmente horrível, mas não há nada remotamente tão bom quanto para conteúdo rápido). Compile apenas o acesso ao banco de dados que usa consultas parametrizadas (elimina quase todos os ataques de injeção SQL). Projete seu esquema e autorizações no MySQL para isolar todos os usuários.
Estou utilizando permissões de grupo em uma situação semelhante:
Existe um usuário e um grupo dedicados para cada site
Todos os arquivos e diretórios que devem ser lidos pelo Apache são graváveis pelo proprietário e pelo grupo (umask é definida como 027
) e pertencem ao respectivo grupo de sites
O usuário do Apache não privilegiado www-data
é um membro do grupo de cada site
Os diretórios e arquivos gerenciados pelos administradores do site (conteúdo da web) são de propriedade do respectivo usuário
Tudo gerenciado pelo servidor admins: aplicativos da Web, scripts CGI, certificados SSL, etc., é colocado em diretórios separados e de propriedade do root. As diretivas Alias
e ScriptAlias
são usadas para acessá-las.
Os diretórios aos quais os scripts CGI e os aplicativos da Web devem ter acesso de gravação são de propriedade de www-data
e do respectivo grupo de sites e têm o setgid
bit definido ( chmod g+s
). Como resultado, os arquivos criados neles pertencem ao grupo de sites, não www-data
, e podem ser lidos pelo administrador do site.
Tags apache-2.2 unix