Segurança de hospedagem multi-site - garanta que nenhum script possa ser executado como usuário do Apache, mas apenas como usuário de cada site

2

Na configuração de um ambiente de hospedagem com vários sites que devem ser isolados uns dos outros, eu fiz o passo óbvio de ter o PHP configurado para ser executado como o usuário associado a cada site, em vez de ser o usuário do Apache, mas Existe alguma maneira de ter certeza de que não é possível que um site possa executar um script escrito em alguma outra linguagem (por exemplo, Python) como o usuário do Apache? Eu vi ataques inteligentes como o ataque symlink que usa regras de .htaccess e um symlink para enganar o Apache em servir arquivos PHP de outros sites como texto simples (isso não está relacionado à pergunta, apenas um exemplo), e desde então eu sou não muito familiarizado com a configuração de linguagens do lado do servidor diferentes do PHP, eu não sabia o que checar e / ou proibir, como via o arquivo conf Apache, para garantir que os scripts escritos em outras linguagens não pudessem ser executados como o usuário do Apache.

Por exemplo, mesmo que o PHP esteja configurado para rodar como usuário do site, se um site for hackeado, o hacker pode criar um arquivo .htaccess que configure arquivos .abc para executar como scripts Perl e se as coisas não estiverem configuradas corretamente no servidor, então eles são executados como o usuário do Apache?

Qual é a melhor maneira de abordar isso?

    
por sa289 12.06.2015 / 01:07

2 respostas

0

A partir da leitura do link , parece que se o suexec estiver sendo usado corretamente, os scripts CGI serão executado como o usuário do Apache não deve ser uma preocupação, pois eles serão executados sob o usuário definido pelas diretivas do suexec.

    
por 11.07.2015 / 23:10
3

Assim, sua principal preocupação é que uma conta comprometida não possa fazer nada de mal a outras contas.

Permissões de PHP e arquivo

Se o PHP estiver configurado para ser executado como usuário diferente para cada domínio, seus diretórios deverão ser configurados de forma que não tenham acesso de gravação a nada fora de seu próprio domínio. Então, usando PHP (ou qualquer outro comando invocado via PHP) não pode causar nenhum dano ao resto do servidor.

A melhor prática é fazer com que os scripts sejam de propriedade de user1, mas o PHP deve ser executado sob user2. Para acesso do cliente, o FTP deve ser configurado para user1. User2 deve receber acesso de escrita somente para diretórios específicos onde realmente for necessário (cache dir, geração de thumbnails, upload de arquivos via PHP).

Mas muitas pessoas começam a instalar o Wordpress e outros CMS, não sabem o que fazer e dão acesso de gravação a tudo (então o plugin CMS mal escrito pode comprometer todos os scripts php para esse domínio). O Wordpress e outros CMS atualmente suportam instalação / atualização, mesmo sem permissões de gravação para o processo PHP (eles apenas solicitam login FTP e automaticamente o utilizam).

Outra prática recomendada é bloquear o acesso direto da Web aos diretórios em que o usuário2 possui acesso de gravação. Uploads de arquivos devem ser verificados pelo seu script, e somente se forem válidos, movidos para o diretório acessível de fora (caso contrário, alguém pode fazer upload de script PHP em vez de imagem JPG e pode enganar seu servidor web para executá-lo).

Apache

Use a diretiva AllowOverride None do Apache para desabilitar o uso do arquivo .htaccess , para que os ataques não possam configurar a execução de outros scripts CGI. O Apache deve ter apenas acesso de leitura aos arquivos servidos (os arquivos de configuração do PHP contendo senhas não precisam de permissões de leitura para o Apache). Com .htaccess desabilitado, o usuário não tem como alterar a configuração do Apache.

Use Options -FollowSymLinks (ou -SymLinksIfOwnerMatch ) para evitar o ataque "symink".

Instale mod_security para observar atividades suspeitas e bloquear tentativas de invasão, como a injeção de SQL.

EDITAR : Se .htaccess for necessário, você precisa decidir quais opções sua hospedagem suportará e ativar somente essas. Exemplos de opções comumente usadas que são seguras incluem (liste-as em AllowOverride ):

  • AuthConfig - para ativar a autenticação HTTP básica
  • ErrorDocument - para definir o próprio URL em vez do padrão para a resposta 404 (como você está definindo apenas o URL, somente o conteúdo já acessível pode ser usado, portanto, nenhum risco)
  • Índices - se você quiser ativar listagens de diretórios simples
  • Limite - para limitar o acesso por endereço IP (geralmente usado pela diretiva Deny from all para negar acesso a parte do diretório)
  • RewriteEngine, RewriteOptions, RewriteBase, RewriteCond, RewriteRule - para mod_rewrite
  • SymLinksIfOwnerMatch - necessário para o mod_rewrite (sua documentação declara que ele precisa de FollowSymLinks , mas parece que funciona também com este); além do uso do mod_rewrite, o Apache só seguiria o symlink se o arquivo de destino / dir fosse proprietário pelo mesmo usuário que o symlink em si.
por 15.06.2015 / 14:07