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?