View Full Version : [C] Linux e root
Salve a tutti, sto scrivendo un programma per linux che deve necessariamente girare con i permessi di root, su 3000 righe di codice però quelle dove sono necessari i permessi di super-utente sono solo una decina. (per settare la scheda di rete in modalità promiscua)
E' possibile acquisire i permessi di root durante l'esecuzione del programma chiedendo la password all'utente e poi rilasciarli quando non sono necessari?
Ho provato ad usare le libpam ma non mi permettono di cambiare utente...non so che pesci prendere !
ciao!
puoi utilizzare il sudo. devi configurare il file /etc/sudoers
Per caso stai sviluppando un IDS (firewall)
Come lo uso sudo?
Non voglio lanciare il programma da root...voglio lanciarlo da utente normale e chiedere la password di root solo per fare una parte del codice..
sottovento
05-12-2005, 07:54
Ciao,
non ti conviene creare un processo a parte per quel codice e settare lo sticky bit? Te la caveresti con un chmod solo sul processo in questione, senza dover usare l'utente di root, un po' come quando stampi....
ilsensine
05-12-2005, 09:08
Il modo più rapido è rendere il programma root suid (chmod +s). Un programma root suid parte con effective uid=0 (root), ma può cambiare id durante la sua esecuzione. Così puoi farlo girare come utente quando non ti servono i privilegi di root.
Innanzitutto all'inizio prendi nota dell'id dell'utente che lo avviato, e cambi id in quello dell'utente:
uid_t user_id = getuid();
if (geteuid())!=0) {
fprintf(stderr, "This program must be root suid\n");
exit(-1);
}
seteuid(user_id);
setegid(getgid());
Quindi riacquisisci i privilegi di root quando/se necessario:
seteuid(0);
execute_privileged_code();
seteuid(user_id);
Ci sono forse tecniche piu' sicure (pam, processo root suid esterno, demone di sistema, capability ecc). Un programma root suid è sempre un potenziale problema di sicurezza.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.