|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Nov 2004
Città: pisa
Messaggi: 204
|
[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! |
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Nov 2004
Città: pisa
Messaggi: 204
|
up
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Jun 2004
Città: Catania
Messaggi: 88
|
puoi utilizzare il sudo. devi configurare il file /etc/sudoers
Per caso stai sviluppando un IDS (firewall)
__________________
Mic |
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Nov 2004
Città: pisa
Messaggi: 204
|
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.. |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
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.... |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
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: Codice:
uid_t user_id = getuid();
if (geteuid())!=0) {
fprintf(stderr, "This program must be root suid\n");
exit(-1);
}
seteuid(user_id);
setegid(getgid());
Codice:
seteuid(0); execute_privileged_code(); seteuid(user_id);
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:06.



















