LINUX.ORG.RU

shell script suid wrapper.


0

0

Большая просьба очень сильно не пинать, си практически не знаю ( Ага, а лезу) Нужен был суидный враппер для шелл скрипта, но под другого пользователя, не рута. Из экспериментов выяснилось, что просто с euid, без дополнительного setresuid новый exec уже идет с saved uid, а не euid.

Нужно еще, чтоб при этом передавал информации о старом юид. Накарябал такое, подскажите, пожалуйста, насколько все плохо с этим кодом в плане безопасности. То, что код сам по себе кривой, я предполагаю :-)

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#define _GNU_SOURCE

uid_t uid;
uid_t euid;
static char olduid[256];

void getolduid() {
uid = getuid();
euid = geteuid();
}

int main(int argc, char** argv) {
getolduid();
sprintf(olduid,"OLDUID=%d",uid);
putenv(olduid);
setresuid(geteuid(), geteuid(), geteuid());
execv("/bin/prog.real", argv);
return 0;
}

anonymous

суид для скриптов не пашет из-за потенциального рейс кондишена

только судо

Pi ★★★★★
()

проверок никаких нету, в execv передаётся немодифицированный argv в котором будет первым аргументом имя программы, А так, вроде, секурна.

true_admin ★★★★★
()
Ответ на: комментарий от vasily_pupkin

Про sudo естественно в курсе. Вопрос в том, что оно работать скорее всего не будет, так как пользователи не реальные, а виртуальные, хранятся в mysql. Даже если в sudo описывать группу, то оно наверняка будет проверять наличие пользователей в passwd и тут упс.

По поводу ввода. Ввод не фильтруется, его будет фильтровать сам скрипт. Меня больше волнует, нет ли каких-нибуть переполнений и тому подобных вещей, которые могут вызвать ошибки в работе самого враппера.

anonymous
()
Ответ на: комментарий от anonymous

на самом деле был не совсем точен. Враппер не для шелл скрипта, а для perl. Добавил во враппер unsetenv для ряда переменных типа PERLIO_DEBUG, PERLLIB, PERLOPT, PERL5LIB...

Знаю, что можно еще использовать suidperl, но он как-то уж совсем не нравится...

anonymous
()
Ответ на: комментарий от anonymous

Гм. Вы используете виртуальные юиды в реальной системе? Зачем? Если у вас в системе используется сущность, не лучше ли ей дать имя?

По поводу mysql - посмотрите в гугле nss_myql. Наверняка что то рабочее есть.

По поводу враппера - вроде все нормально. Только опять же - елси пользователи виртуальны, чей uid он берет? O_O

vasily_pupkin ★★★★★
()
Ответ на: комментарий от anonymous

>Вопрос в том, что оно работать скорее всего не будет, так как пользователи не реальные, а виртуальные, хранятся в mysql. Даже если в sudo описывать группу, то оно наверняка будет проверять наличие пользователей в passwd и тут упс.

Проверять он их будет так, как указано в правилах PAM (если конечно он используется =)). Так что Ваша проблема решается с использованием плагина pam_mysql (или как-то так). Плюс еще есть такая штука как /etc/nsswitch.conf

Sectoid ★★★★★
()
Ответ на: комментарий от vasily_pupkin

//Топик мой, пардон, проблемы с авторизацией были.

Рисую итерфейс для управления почтовыми аккаунтами и доменами. Пользователи те - что авторизовались через dovecot imap. Пользователи хранятся сейчас в mysql, потом будут перенесены в sqlite. В общем, в этой схеме pam_mysql/sqlite nss_mysql/sqlite - излишние навороты. Простой враппер тут самое то :-)

Valmont ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.