Estou configurando um servidor web que hospedará vários sites diferentes como o Apache VirtualHosts, e cada um deles terá a possibilidade de executar scripts (principalmente PHP, possivelmente outros).
Minha pergunta é como isolar cada um desses VirtualHosts um do outro e do resto do sistema? Não quero que, por exemplo, o site X leia a configuração do site Y ou de qualquer um dos arquivos "privados" do servidor.
No momento, configurei o VirtualHosts com FastCGI, PHP e SUExec, conforme descrito aqui ( http://x10hosting.com/forums/vps-tutorials/148894-debian-apache-2-2-fastcgi-php-5-suexec -easy-way.html ), mas o SUExec apenas impede que os usuários editem / executem arquivos diferentes dos seus - eles ainda podem ler informações confidenciais, como arquivos de configuração.
Pensei em remover a permissão de leitura global do UNIX para todos os arquivos no servidor, pois isso resolveria o problema acima, mas não tenho certeza se posso fazer isso com segurança sem interromper a função do servidor.
Também procurei usar o chroot, mas parece que isso só pode ser feito por servidor e não por host virtual.
Estou procurando sugestões que isolem meus VirtualHosts do resto do sistema.
PS Estou executando o servidor Ubuntu 12.04
RESPOSTA: Eu terminei quase seguindo a minha configuração atual, mas executando uma prisão chroot para todos os hosts virtuais, por exemplo, tendo a prisão chroot /var/www
e depois tendo todos os dados dos usuários em subpastas, cada uma com permissões de grupo / outros r / w / x Desativado. Essa opção era desejável, especialmente porque tudo é possível sem nenhuma modificação no código-fonte.
Selecionei a resposta do @Chris, porque foi completamente escrita e também considerada FTP e SELinux
fonte
mod_userdir
oferece hospedagem virtual de domínios separados. Além disso, tenho preocupações com a segurança em termos de isolamento, pois não consigo encontrar nada sobre isso entre os diretórios do usuário no Apache. Parece apenas não oferecer esse recurso.Sugiro dar uma olhada
suphp
ou PHP-FPM .Basicamente, permitirá que o interpretador PHP 'su' para algum usuário específico configurado para esse VirtualHost. Isso permitirá que você utilize permissões gerais do sistema de arquivos para isolar cada VirtualHost.
Eu recomendaria o FPM por considerações de desempenho. Na página inicial, é isso que mais lhe interessa:
fonte
Olhe para dentro
chroot
.Alguns pontos de partida:
Apache chrooting simplificado
Ambiente Chroot para Apache (Debian)
Cadeia Apache Chroot: Hospedagem Virtual
fonte
/var/www
e ter todos os hosts em um subdiretório, cada um desses subdiretórios removendo a permissão global de execução / leitura?chroot
, e você pode fazê-lo por servidor virtual. Aqui está um exemplo. Nesse caso, eles estão usandomod_chroot
.