Implicações que vêm com o chrooting php-fpm

3

Estou criando um servidor de produção que executará o nginx com o php-fpm. Eu quero ter uma boa mistura entre proteger o servidor e ainda ter um bom fluxo de trabalho rápido.

Agora, uma coisa que sempre protege o sistema é o chrooting. Agora eu li muito sobre isso, e o nginx de chrooting é bem complicado.

Diz-se que uma boa maneira é usar a função chroot que o php-fpm criou. Eu li vários guias, que explicam como configurá-lo, mas não li sobre as implicações que isso traz. Eu até li que não há nenhum.

Bem, o primeiro problema que tive foi algo relacionado ao tempo. A solução foi copiar /etc/localtime e a pasta /usr/share/zoneinfo no diretório chroot.

NENHUM dos guias informa isso e é o primeiro erro que você percebe.

Agora estou com problemas com file_get_contents , recebo o seguinte erro:

failed to open stream: php_network_getaddresses: getaddrinfo failed: Name or service not known

Acho que a solução será adicionar mais arquivos ao chroot. Eu realmente não quero fazer isso para todos os sites que desenvolvo.

Pergunta

Agora, este é o caso do chrooting, mesmo em php-fpm, ou estou fazendo algo errado. Existe algo que eu tenha que habilitar para que tudo funcione, ou devo mover tudo para o diretório?

    
por Saif Bechan 28.12.2011 / 22:13

2 respostas

4

Sim, você precisará de um sistema de arquivos básico no diretório chroot. E não, você não deve mover (ou vincular) tudo - isso irá muito bem derrotar todo o propósito do chrooting.

Essencialmente, os recursos que precisam estar presentes no chroot são aqueles que o servidor precisará acessar durante o tempo de execução - qualquer biblioteca carregada dinamicamente, diretórios de log e estruturas de suporte necessários para qualquer coisa que o servidor esteja fazendo.

Nesse caso, você está sem a configuração básica de resolução de nomes - /etc/resolv.conf , /etc/nsswitch.conf e nss / dns / resolv relacionados a /lib seria um bom começo.

    
por 28.12.2011 / 22:32
1

Copiar resolving-libs e / etc-files não é realmente necessário, se você puder executar nscd em seu servidor.

A idéia básica é ligar o soquete de domínio Unix do nscd (geralmente / var / run / nscd / socket) no chroot. (e) A glibc tentará contatá-lo para resolver nomes de usuários, nomes de host, etc. Somente se o nscd não estiver em execução, (e) a glibc recorrerá a resolver as coisas sozinho.

Mais detalhes sobre isso e outras coisas que você pode precisar corrigir ao executar o PHP em um chroot podem ser encontrados no post do meu blog:

por 30.04.2013 / 11:17