Isolando o Apache virtualhosts do resto do sistema

9

Eu estou configurando um servidor web que irá hospedar um número de sites diferentes como Apache VirtualHosts, cada um deles terá a possibilidade de executar scripts (principalmente PHP, possivelmente outros).

Minha pergunta é como eu isolar cada um desses VirtualHosts um do outro e do resto do sistema? Eu não quero, e. site X para ler a configuração do site Y ou qualquer um dos arquivos "privados" do servidor.

No momento, configurei o VirtualHosts com FastCGI, PHP e SUExec, conforme descrito aqui ( link ), mas o SUExec só impede que os usuários editem / executem arquivos que não sejam seus - os usuários 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 corrigiria 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 restante do sistema.

PS Estou executando o servidor Ubuntu 12.04

Minha RESPOSTA: Acabei quase seguindo minha configuração atual, mas fazendo um chroot jail para todos os hosts virtuais, por exemplo, tendo o chroot jail em /var/www e, em seguida, ter todos os dados dos usuários em subpastas, cada um com grupo / outros r / w / x permissões desabilitadas. Esta opção era desejável especialmente porque é tudo possível sem qualquer modificação no código-fonte.

Selecionei a resposta do @Chris, porque ela foi totalmente escrita e também considerada FTP e SELinux

    
por JesperB 21.11.2012 / 21:47

3 respostas

4

Isso pode ser feito habilitando o módulo mod_users no Apache.

Você precisará configurar o UserDir na configuração do seu apache. Eu sugiro que você faça isso em um arquivo de configuração separado e inclua-o. Enrole a inclusão em

<IfModule mod_users.c>
   Include conf/extra/userdir.conf
</IfModule>

Eu posso lhe dar todo o tutorial, mas isso deve ajudá-lo a configurar o Apache: link

Dica: se você está executando o SELinux (e deveria), você teria que dar acesso de leitura ao Apache às residências dos usuários. Você pode fazer isso definindo:

sudo setsebool -P httpd_enable_homedirs=On

Ele também precisa de permissões de arquivo para o diretório dirs do usuário public_html e permissões r-x nos diretórios pai até o root.

Obviamente, você precisa configurar o chroot para os usuários, por exemplo, no vsftpd. Instalar:

apt-get vsftpd

Para configurar o chrooting, abra /etc/vsftpd/vsftpd.conf com o vi ou nano. Encontre e descomente ou adicione:     chroot_local_user = yes

Você pode obter o mesmo comportamento para o sftp que eu recomendo sobre FTP, abra / etc / ssh / sshd_config e adicione um bloco Match e esta linha:

Subsystem   sftp    internal-sftp

Match Group web_users
    ChrootDirectory %h
    ForceCommand internal-sftp
    AllowTcpForwarding no
Match

Isso fará chroot de qualquer usuário no grupo web_users . Além disso, você precisaria negar acesso ao shell configurando-o para / sbin / nologin:

useradd -G "web_users" -s /sbin/nologin new_user

Se este for um servidor de produção público, sugiro também que você aplique um pouco de hardening no sistema operacional, OpenSSH, Apache, PHP, vsftpd e aplique alguns iptables estritos e TCP wrappers. Eu recomendo que você deixe o SELinux no lugar também.

    
por 21.11.2012 / 23:44
6

Sugiro que dê uma olhada em suphp ou PHP-FPM .

Basicamente, habilitará o interpretador do PHP para 'su' para algum usuário específico configurado para aquele VirtualHost. Isso permitirá que você utilize permissões gerais do sistema de arquivos para isolar cada VirtualHost.

Eu recomendaria o FPM para considerações de desempenho. Na página inicial, isso é o que mais lhe interessa:

Also of interest are the per-pool user and group options, which allow you to run that specific fpm pool under the given uid and gid; goodbye suphp!

    
por 21.11.2012 / 22:50
4