The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Измененение уровня доступа процесса"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"Измененение уровня доступа процесса"  
Сообщение от Dimedriller (ok) on 15-Апр-09, 23:00 
Приветствую. В программировании для UNIX я новичок, поэтому, возможно, ответ будет очевидным, однако поиском подходящего решения я так и не нашел.

Я пишу CGI приложение на C++, в нем есть вызов через execl другого приложения, которое может быть запущено только под root'ом. Собственно вопрос: как изменить уровень доступа моего приложения, чтобы была возможность вызвать приложения, требующие root'а? root пароль считается известным.

Я пытался реализовать это через PAM

    int childProcessID;

    childProcessID=fork();
    if (childProcessID==0)
    {
        pam_handle_t* pamh;
        struct pam_conv pamc;
        pamc.conv = user_conversation;
        pamc.appdata_ptr = NULL;
        pam_start ("login", NULL, &pamc, &pamh);
        if (pam_authenticate (pamh, 0) != PAM_SUCCESS)
            printf ("Authentication failed!\n");
        else
            printf ("Authentication OK.\n");
        
        if (pam_open_session(pamh, 0) != PAM_SUCCESS)
            printf ("Session failed!\n");
        else
            printf ("Session OK.\n");
        execl("/usr/local/sbin/iptables","iptables","-L",NULL);
        .....
    }
    else
    {
        wait(childProcessID);
        .....
    }

однако таким образом получилось залогинится только под тем же логином, под которым запускалось приложение. Есть ли какие нибудь тонкости в использовании PAM API? Или настройке PAM в системе?

Можно ли еще каким либо образом изменить права процесса?

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Измененение уровня доступа процесса"  
Сообщение от angra (ok) on 15-Апр-09, 23:38 
Для того, чтобы менять uid нужно уже иметь uid 0, то бишь рута. Программы типа login, xdm, ssh итд запускаются из под рута, проверяют возможность пользователя авторизоваться (в простейшем случае по паролю) и потом меняют uid на нужный. В получении uid 0 может помочь suid бит в правах на файл.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Измененение уровня доступа процесса"  
Сообщение от Pahanivo (ok) on 16-Апр-09, 07:42 
>Для того, чтобы менять uid нужно уже иметь uid 0, то бишь
>рута. Программы типа login, xdm, ssh итд запускаются из под рута,
>проверяют возможность пользователя авторизоваться (в простейшем случае по паролю) и потом
>меняют uid на нужный. В получении uid 0 может помочь suid
>бит в правах на файл.

только не забываем что suid это опасно )

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Измененение уровня доступа процесса"  
Сообщение от Dimedriller (ok) on 19-Апр-09, 23:28 
Спасибо огромное за советы. Действительно все получилось элементарным выставлением suid бита.


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




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

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