chroot + php-fpm

Discussion in 'Linux, Freebsd, *nix' started by PandoraBox, 23 Jan 2010.

  1. PandoraBox

    PandoraBox Elder - Старейшина

    Joined:
    6 May 2007
    Messages:
    262
    Likes Received:
    176
    Reputations:
    7
    В процессе обсуждения в highload_php_ru оказалось, что в услвиях chroot, fopen("http://yandex.ru") не работает, т.к. неможет отрезолвить адрес.

    Хотел было тоже поковыряться в поисках решения, но это сделали быстрей меня. Оставляю здесь решение, чтобы не потерялось.

    Нужно скопировать из корневого /etc в сhroot-овый etc файлы host.conf, hosts, localtime, resolv.conf, nsswitch.conf (по идеи только его должно хватить, но не уверен). Также cp -a /lib/libnss_{dns,files,compat}* /chroot/lib/ и рестарт php-fpm, чтобы glibc подхватил нужные либы

    Code:
    $ set CHROOT_FPM="/var/www"; echo $CHROOT_FPM;
    /var/www
    симлинки
    Code:
    $ ln -s "/etc/host.conf" "$CHROOT_FPM/host.conf";
    $ ln -s "/etc/hosts" "$CHROOT_FPM/hosts";
    $ ln -s "/etc/localtime" "$CHROOT_FPM/localtime";
    $ ln -s "/etc/resolv.conf" "$CHROOT_FPM/resolv.conf";
    $ ln -s "/etc/nsswitch.conf" "$CHROOT_FPM/nsswitch.conf";
    симлинки на дополнительно библиотеки MySQL например
    Code:
    $ ln -s "/lib/" "$CHROOT_FPM/lib"
    $ mkdir -p "$CHROOT_FPM/tmp"
    $ ln -f "/tmp/mysql.sock" "$CHROOT_FPM/tmp/mysql.sock"
     
    #1 PandoraBox, 23 Jan 2010
    Last edited: 23 Jan 2010
    1 person likes this.
  2. PandoraBox

    PandoraBox Elder - Старейшина

    Joined:
    6 May 2007
    Messages:
    262
    Likes Received:
    176
    Reputations:
    7
    на примере NgINX :)

    Code:
            location ~ \.php$ {
    ................
                root           /var/www/rambler_ru;
    .......
                fastcgi_param  DOCUMENT_ROOT    /rambler_ru;
                fastcgi_param  SCRIPT_FILENAME  /rambler_ru$fastcgi_script_name;
                fastcgi_param  PATH_TRANSLATED  /rambler_ru$fastcgi_script_name;
    
                include        fastcgi_params;
    
    в fastcgi_params коментируем
    Code:
    #fastcgi_param  DOCUMENT_ROOT      $document_root;
     
  3. PandoraBox

    PandoraBox Elder - Старейшина

    Joined:
    6 May 2007
    Messages:
    262
    Likes Received:
    176
    Reputations:
    7
    nginx не умеет и не будет уметь запускать отдельные локейшены от разных пользователей, посему от файлового способа передачи запроса придется отказаться или приминить патч

    Code:
    ~/nginx-0.6.31/src$ grep -R request_body_file_group_access *
    http/ngx_http_request.h:    unsigned
    request_body_file_group_access:1;
    http/modules/ngx_http_dav_module.c:        r-
    >request_body_file_group_access = 1;
    
    http/ngx_http_request_body.c:            if (r-
    >request_body_file_group_access) {
    
    http/ngx_http_request_body.c:        if (r-
    
    >request_body_file_group_access) {
    
    http/ngx_http_request_body.c, ngx_int_t
    ngx_http_read_client_request_body:
    
                if (r->request_body_file_group_access) {
                    tf->access = 0660;
                }
     
    #3 PandoraBox, 23 Jan 2010
    Last edited: 23 Jan 2010