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 своим объектом и, вдруг, первый процесс кончает работу и
выплевывает большую кучу контента. Уйдет ли контент нужному клиенту
или перемешается?
|