The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
смена EUID в перловом скрипте, !*! Andrey_эМ, 29-Сен-03, 11:03  [смотреть все]
Приветствую всех :)

Ситуация: скрипт запускается из-под сишного суидного враппера:

char param[PATH_MAX] = "/mail/qmail/bin/uforeach.pl";
int main(int argc, char *argv[])
{
execv(param, argv);
return(0);
}

Из-под скрипта видно, что он запущен с
UID=1015, GID=0, EUID=0, EGID=0
После запуска скрипт хочет сделать себе EUID=UID и EGID=GID (понизить привилегии до уровня вызвавшего пользователя). Делаю все, как написано в man perlsec на сей счет:

#!/usr/bin/perl -w

use strict;                                    
use integer;                                    
use English;
    
print STDERR "1. PID=$PID, UID=$UID, GID=$GID, EUID=$EUID, EGID=$EGID\n";
my @temp = ($EUID, $EGID);
$EUID = $UID;
$EGID = $GID;    #      initgroups() also called!
# Make sure privs are really gone
($EUID, $EGID) = @temp;
print STDERR "2. PID=$PID, UID=$UID, GID=$GID, EUID=$EUID, EGID=$EGID\n";
die "Can't drop privileges" unless $UID == $EUID  && $GID eq $EGID;
print STDERR "Ok\n";

И не работает.
Пускаю от враппер от юзера с UID=1015, GID=0, права rwsr-xr-x. Права на сам скрипт - обычный root:wheel 755.

Имеем следующий output:
1. PID=79963, UID=1015, GID=0 0 0, EUID=0, EGID=0 0 0
2. PID=79963, UID=1015, GID=0 0 0, EUID=0, EGID=0 0 0
Can't drop privileges at /mail/qmail/bin/uforeach.pl line 14.

Ключик -U вместо/вместе с -w не помогает.
Что можно сделать ?

На всякий случай: все это делается для того, чтобы в суидном скрипте выполнить foreach (</path/*.ext>), чего этот чертов taint mode не позволяет. Вот и сооружаю  open(KID, "-") - "create a child process with reduced privilege who does the dirty work for you", как в мане написано. Да только приоритет понизить не могу :(

FreeBSD 4.7-RELEASE
Perl, version 5.005_03 built for i386-freebsd

Заранее спасибо.

  • смена EUID в перловом скрипте, !*! Andrey_эМ, 15:32 , 29-Сен-03 (1)

    >На всякий случай: все это делается для того, чтобы в суидном скрипте выполнить foreach (</path/*.ext>), чего этот чертов taint mode не позволяет.

    Проблема решена (точнее, обойдена) использованием readdir вместо foreach.

    Всем спасибо...

    p.s. а узнать, отчего не менялся euid, все же хотелось бы :)





Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру