chroot processo php-fpm para a casa do usuário

3

Estou no processo de mover cada um dos meus sites que estão em um único servidor a partir de uma única instância do PHP (pelo qual todos os arquivos em todos os sites eram de propriedade do apache e apenas a biblioteca php padrão foi instalada sem php -fpm) ... e estou instalando um pool php-fpm para cada site individual.

Melhor segurança e separação dos sites é meu objetivo, o maior objetivo é que os scripts PHP em um site não consigam acessar scripts PHP de outro site.

Aparentemente estou fazendo algo errado.

Meu ambiente:

  • CentOS 7
  • PHP 5.4.16
  • Apache 2.4.6

Veja um exemplo do arquivo de configuração do pool php-fpm:

[root@host]# cat /etc/php-fpm.d/website1.com.conf 
    [website1.com]
    user = user1
    group = user1
    listen = /var/run/php-fpm/website1.com.sock
    listen.owner = user1
    listen.group = user1
    php_admin_value[disable_functions] = exec,passthru,shell_exec,system
    php_admin_flag[allow_url_fopen] = on
    php_admin_value[short_open_tag] = On
    pm = ondemand
    pm.max_children = 5
    pm.start_servers = 2
    pm.min_spare_servers = 1
    pm.max_spare_servers = 3
    chdir = /home/www/website1.com/

E aqui está o seu arquivo vhost correspondente no Apache:

[root@host]# cat /etc/httpd/conf.d/website1.com.conf 
        <VirtualHost *:80>
                ServerAdmin [email protected]
                ServerName website1.com
        ServerAlias www.website1.com
        DocumentRoot /home/www/website1.com/www
                <Directory "/home/www/website1.com/www">
                        Options Includes FollowSymLinks
                        AllowOverride All
                        Order allow,deny
                        Allow from all
                </Directory>
        ErrorLog /home/www/website1.com/logs/errors
        CustomLog /home/www/website1.com/logs/access_log common
                <FilesMatch "\.php$">
                        SetHandler "proxy:unix:///var/run/php-fpm/website1.com.sock|fcgi://website1.com/"
                </FilesMatch>

        </VirtualHost>

Todos os arquivos e pastas são de propriedade exclusiva do usuário1 (o grupo também é definido como usuário1).

Eu tenho um script PHP dentro de "website2" que ainda é capaz de acessar o conteúdo "website1". As configurações no arquivo de configuração do conjunto php-fpm para "website2" e as configurações no arquivo de configuração "website2" do Apache são idênticas ao website 1 (com exceção de caminhos de pastas, diretórios home, chroot, etc ...).

Este é o meu script de teste, localizado em / home / www / website2 / www / e acessível através do nome de domínio website2.com:

<?php
$test = file_get_contents('/home/www/website1.com/www/wp-config.php');
echo $test;
#$files = scandir('/home/www');
#print_r($files);
?>

A saída deste script é um pouco inesperada, no entanto. Eu não vejo o conteúdo completo do wp-config.php. Em vez disso, o que eu vejo é tudo além de um certo ponto no arquivo (se você estiver familiarizado com o wp-config.php, eu vejo tudo depois da entrada define('SECURE_AUTH_KEY','foo') ).

Por que este script de teste, que está sendo executado sob o acesso "user2", ecoa alguns dos conteúdos do wp-config.php encontrados no diretório "user1"? Eu pensei que a diretiva chdir = /home/www/website1.com/ impediria esse tipo de coisa.

    
por David W 31.10.2015 / 12:44

1 resposta

3

Parece que você definiu chdir em vez de chroot na sua configuração do conjunto php-fpm.

A diretiva chdir simplesmente altera o diretório de trabalho dos processos do php para esse pool; ele não inicia os processos em um chroot.

Veja esta pergunta.

    
por 31.10.2015 / 13:15

Tags