Apache, suexec, PHP, suPHP

12

Embora eu esteja bastante confortável como usuário de Linux , meu Linux Admin-fu é um pouco fraco. Portanto, estou aqui procurando orientação com um servidor CentOS que estou prestes a construir.

Preciso configurar um servidor web Apache2 para alguns de nossos clientes. Quero que o conteúdo da Web de cada cliente esteja no diretório inicial ( USERDIRem apache.conf, certo?) Para os sites HTML estáticos. Quero que o Apache seja executado como cliente ( suexec?). Algumas dessas coisas serão aplicativos PHP e tenho a impressão de que também vou querer ver suphp.

Então, basicamente, eu quero parecer uma versão pequena de uma empresa de hospedagem compartilhada. Considerando como essas são comuns, achei que encontraria facilmente um bom manual de instruções atual sobre como configurar tudo isso, mas até agora tive pouca sorte. Suspeito que minhas palavras de pesquisa estejam desativadas.

Portanto, as perguntas (sinta-se à vontade para responder a uma ou todas):

  1. Alguém tem alguns links sólidos para guias atuais / modernos que me ajudariam a configurar tudo isso? Não, o site de documentação do apache não é um guia ;-)
  2. Como tenho uma mistura de sites estáticos e aplicativos PHP, quero / preciso do suexec e do suphp instalados? Em caso afirmativo, isso apresenta algum desafio que eu deveria estar ciente?
  3. Devo procurar outras opções em vez de suexec e suphp?

Eu pretendo fornecer aos usuários finais SSH, SFTP ou SCP acesso às suas coisas (se isso afetar alguma coisa).

Agradeço antecipadamente por sua ajuda.

[Editar] Eu deveria ter mencionado isso antes: Um dos principais objetivos da minha busca emular um provedor de hospedagem compartilhada relacionado a permissões e propriedade de arquivos. Eu realmente gostaria de evitar ensinar aos usuários a necessidade de mudar essas coisas apenas para ver suas adições / alterações.

Chris_K
fonte

Respostas:

14

O uso de suexec e suphp impõe um tipo diferente de separação de privilégios que o padrão.

O padrão é separar a permissão do usuário do servidor da web. Ou seja, o usuário possui os arquivos e ele precisa conceder ao servidor da Web permissão para visualizá-los e alterá-los.

O modelo suexec / suphp é que o servidor da web (ao executar scripts) é executado na conta do usuário, portanto o site tem permissão para fazer qualquer coisa que o usuário tenha permissão para fazer. Até certo ponto, isso remove a separação entre o usuário e o servidor da web, mas, em troca, impõe uma separação DIFERENTE: ou seja, entre o site de um usuário e o site de um usuário diferente na mesma caixa.

Por padrão, o PHP sempre é executado na conta de usuário do Apache, portanto, os scripts PHP de um site podem acessar todos os arquivos que os scripts PHP de outro site. Portanto, se uma conta no servidor for invadida, a infecção poderá se espalhar para as outras. O SuPHP impede isso.

Nem suexec nem suphp afetarão a maneira como o apache serve conteúdo estático . Todas as regras antigas ainda se aplicam. Em vez disso, suexec e suphp alteram a conta na qual o CGI e o PHP (respectivamente) serão executados. O Suexec torna o executável CGI executado na conta do proprietário, enquanto o SuPHP faz os scripts PHP executados na conta do proprietário.

Suexec e SuPHP não são necessariamente melhores . Eles são apenas diferentes . Eles não impedem que um site seja invadido (e, sem dúvida, pode facilitar a invasão do site ), mas impedem que um compromisso em um site se espalhe para todos os outros. Para o administrador do site, esse isolamento é sem dúvida mais importante, e é por isso que alguns sistemas de hospedagem compartilhada tornam o suexec e o suphp o padrão.

Uma "pegadinha" extremamente comum é que o SuPHP verifica a propriedade e as permissões de um script antes da execução e retornará um erro 500 se as permissões não forem apropriadas.

Em particular:

  • O proprietário e o grupo do arquivo devem corresponder ao proprietário do site (conforme definido na configuração do apache)
  • O arquivo não deve ser gravável no mundo
  • O diretório pai não deve ser gravável no mundo
tylerl
fonte
Então, saber que quero emular um modelo de hospedagem compartilhada (como você apontou, mantendo os usuários um do outro) é o modelo suexec / suphp do jeito que eu quero seguir ou você acha que existem opções melhores? Também editei a postagem para indicar que um dos principais objetivos é evitar ensinar aos usuários sobre a necessidade de modificar permissões ou proprietários de arquivos apenas para ver suas alterações ou adições.
Chris_K
2
O suexec / suphp é uma boa solução para o que você procura.
tylerl
Eu preferiria suphp ao suexec. É mais seguro, eu acho.
precisa saber é o seguinte
@FractalizeR: Normalmente você usa os dois ao mesmo tempo. SuPHP é para PHP, suexec é para CGI. Você pode executar o PHP sobre o suexec executando o PHP como CGI, mas isso é um pouco desnecessário, pois existem opções melhores (mais seguras, mais eficientes) para o PHP.
tylerl
@tylerl: Muito obrigado pela sua resposta. Quais são as soluções mais seguras / eficientes para PHP a que você está se referindo?
benjamin