aneira correta de executar programas setuid em C

Tenho um processo com permissões 4750. Existem dois usuários no meu sistema Linux. O usuário root e o usuário appz. O processo herda as permissões de um gerenciador de processos que é executado como usuário "appz".

Tenho duas rotinas básicas:

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);
        }
}

Meu fluxo é o seguinte:

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();

    }

 }

Como você pode ver, quero executar alguns comandos como root. Estou tentando remover permissões temporariamente e, se as tarefas precisarem de acesso root, envolvo o comando entre uma chamada do_root e undo_roo

No entanto, parece que meu programa não está funcionand

Qual é a maneira canônica de fazer isso?

questionAnswers(6)

yourAnswerToTheQuestion