Ho un processo con autorizzazioni 4750. Esistono due utenti nel mio sistema Linux. L'utente root e l'utente appz. Il processo eredita le autorizzazioni di un gestore di processi eseguito come utente "appz".modo corretto di eseguire i programmi setuid in C
Ho due routine di base:
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);
}
}
Il mio flusso è la seguente:
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();
}
}
Come si può vedere che voglio per eseguire alcuni comandi come root. Sto provando a rilasciare temporaneamente le autorizzazioni e se le attività richiedono l'accesso come root, eseguo il comando tra una chiamata do_root e undo_root.
Tuttavia, sembra che il mio programma non funzioni.
Qual è il modo canonico per farlo?
Invece di uscire solo quando seteuid non riesce, chiamare perror() e il tuo programma ti dirà perché non funziona. –
Dopo aver eliminato i permessi di root, non puoi riaverli !! – Petesh
Tecnicamente, è il file che contiene il programma che ha il permesso 4750, non il processo. Non dirai direttamente che i permessi sono 'root: group: 4750' - è un'inferenza sicura? –