У меня есть процесс с разрешениями 4750. В моей системе Linux есть два пользователя.Пользователь root и пользователь appz.Процесс наследует разрешения диспетчера процессов, который запускается как пользователь "appz".
У меня есть две основные процедуры:
void do_root (void)
{
int status;
status = seteuid (euid);
if (status < 0) {
exit (status);
}
}
/* undo root permissions */
void undo_root (void)
{
int status;
status = seteuid (ruid);
if (status < 0) {
exit (status);
}
status = setuid(ruid);
if (status < 0) {
exit (status);
}
}
Мой поток выглядит следующим образом:
int main() {
undo_root();
do some stuff;
do_root();
bind( port 80); //needs root perm
undo_root();
while(1) {
accept commads()
if ( commands needs root user access)
{
do_root();
execute();
undo_root();
}
}
Как видите, я хочу выполнить некоторые команды от имени пользователя root.Я пытаюсь временно удалить разрешения, и если задачам нужен root-доступ, я заключаю команду между вызовами do_root и undo_root.
Однако кажется, что моя программа не работает.
Какой канонический способ сделать это?