Приветствую. В программировании для 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 в системе?
Можно ли еще каким либо образом изменить права процесса?