ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Права при запуске перлового обработчика и еще кое что


  • To: nginx-ru@xxxxxxxxx
  • Subject: Права при запуске перлового обработчика и еще кое что
  • From: "Павел Круш" <pavel.krush@xxxxxxxxxxxxxx>
  • Date: Mon, 14 Apr 2008 16:30:39 +0700
  • Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlemail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from:to:subject:mime-version:content-type:content-transfer-encoding:content-disposition; bh=iJt8gkOsk0ndmmLe3sfF4Ea5lLAtImjJKWere0ru6/o=; b=pCQylNdzyDHHmWhW8hDlLZRuY9VBzqecYFG7lUUkwA2HU+UY1LOrJwSCDleV2Q4iSlLzGKSfiNiwHkBJ64wNc0N1TNMrDh+uaypVhcfm8dk61G9jWI41TqD8ILg1AvxJz3o4XNyWdhWL4I/+fQPrUnExo59sYOEeNoqhkS4SaZ0=
  • Domainkey-signature: a=rsa-sha1; c=nofws; d=googlemail.com; s=gamma; h=message-id:date:from:to:subject:mime-version:content-type:content-transfer-encoding:content-disposition; b=W1Xkl637mq6ScSYUhuFIBQaDZrioikR3Svk2rI+jppQ1pAL0GqshXupTRfkwMjyPdHxblBt82e+wmwx4KnDz9chBmCUi8cW+kHg+6ERk4mbvZxOBhbVA5XNJnlotFpYIPq899U1I33sHCgd6LkCqzkfYVXNFYPRHj3PrYZvjQPw=

Первое:
Перловый обработчик инициализируется с правами рута, а хэндлер
вызывается уже под непривилегированным пользователем. То есть

package nginxhandler;
use strict;
use warnings;
use nginx;

`echo \`whoami\` >> /tmp/whoami `;

sub handler {
    my $r = shift;
    $r->send_http_header("text/html");
    $r->print(`whoami`);
    return HTTP_OK;
}

Это дает "root" в файле /tmp/whoami и "nobody" на выходе из nginx'a.
Это нормальное поведение? Можно как-нибудь сделать так, чтобы загрузка
была все-таки из под nobody?

И второе:
Стало интересно можно ли запинать HTML::Mason для работы с nginx.
Оказалось, что заводится с полпинка, но возник следующий вопрос.
по умолчанию модуль выводит все, что он нагенерил в STDOUT, откуда
nginx'ом отправляется то ли в /dev/null, то ли еще куда-то.
Но если задать мейсону праметр out_method, то он вместо print делает
вызов данной функции.

Есть у меня вот такой обработчик:

package nginxhandler;
use nginx;

...
our $r; # XXX !!! чтобы $r было видно в out_method
my $mason = new HTML::Mason::Interp(
                                        comp_root => $Config::html,
                                        data_dir => $Config::var .
'/mason_data/',
                                        use_strict => 1,
                                        out_method => sub {
                                                        $r->print(@_);
                                        },
);


sub handler {
        $r = shift;
        $mason->exec(....);
        return HTTP_OK;
}


Собственно вопрос. Может ли случиться такое: Мейсон надолго
задумается(во всех рабочих процессах) на exec'е, приходит еще один
запрос, его подхватывает какой-нибудь рабочий процесс, успевает
подменить $r своим объектом и, вдруг, первый процесс кончает работу и
выплевывает большую кучу контента. Уйдет ли контент нужному клиенту
или перемешается?


 




Copyright © Lexa Software, 1996-2009.