Newsgroup: it.comp.os.linux.development
Titolo: Libpcap e i permessi di root...

Ciao a tutti, sto realizzando un piccolo programmino in java, basato  sulle
libpcap 0.83 e sulle jpcap 0.01.15, che legga i pacchetti in uscita dal mio
pc, e che filtri quelli diretti verso host o indirizzi ip indesiderati, che
carica da una blacklist.
Fin qui tutto bene, se non fosse che mentre debuggavo una porzione del
codice, ho notato che con il mio account il programma non vede alcuna
periferica di rete (a connessione già aperta),mentre lanciandolo come root
vede sia il mio winmodem conexant hcf 56K, sia l'interfaccia di loopback.
Dopo un bel giro su Google e sul forum degli sviluppatori delle Jpcap alla
ricerca della possibile soluzione ho scoperto che il problema è
nell'implementazione delle libpcap, anche se non ho trovato alcuna
soluzione valida per il mio software.
Qualcuno puoi aiutarmi a rendere visibili le periferiche anche quando il
programma è lanciato senza i diritti di root?
Grazie a tutti!
-- 
Ciao da ALEX! :)
Linux Registered User #279209
Email alexf1 at lycos dot it

 programma è lanciato senza i diritti di root?
l'account di root ti serve perché per mettere l'interfaccia in modalità
promisqua sotto unix devi essere root.
Non so bene come farlo in java, però con i vari programmi, per dare quei
diritti agli utenti comuni, devi suidare il programma.

 quei diritti agli utenti comuni, devi suidare il programma.
Non credo che in java ci siano delle API che lo consentano, meglio lavorare
sullo script che avvia il programma (con i programmi java ce ne e' sempre
uno, nessuno si diverte ad impostare il classpath a mano :-) con su/sudo.
Alessandro.



sì, intendevo dire che non so cosa si debba suidare. Il file .class? la
jvm?

 la jvm?
La jvm, perche' e' la sola che e' eseguibile. C'era anche l'opzione nel
kernel per rendere eseguibili i .class ma non ho idea di come funzioni con i
permessi e comunque credo che non la usi quasi nessuno.
Alessandro.

 permessi e comunque credo che non la usi quasi nessuno.
uhh... che brutto suidare la jvm. tutti i programmi diventano suidati...

 uhh... che brutto suidare la jvm. tutti i programmi diventano suidati...
Concordo, anche se a tal punto non vedo alternative... Avevo già fatto la
prova di suidare i file class ieri, ma non ha ovviamente funzionato...
In ogni caso grazie sia a te che ad Alessandro  per l'aiuto! :)
-- 
Ciao da ALEX! :)
Linux Registered User #279209
Indirizzo Email alexf1 at lycos  punto it

In ogni caso grazie sia a te che ad Alessandro  per l'aiuto! :)
il class viene comunque visto come semplice dato (a meno di usare
bin_fmt misc o come cavolo si chiama) . Suidda la jvm o più
semplicemente uno script che lancia l'applicazione.

 semplicemente uno script che lancia l'applicazione.
Ho suiddato la jdk (o meglio, i bin della jdk), ma le cose sembrano non
essere cambiate di una virgola. Proverò a vedere con sudo (una volta visti
un po' di howto, visto che sinora non l'ho mai usato), sperando stavolta
funzioni! ;)


 suidati...
Non devi suidare la jvm ma fare in modo che venga eseguite come root quando
esegue quel particolare programma java.
Sicuramente puoi farlo con "su - -c runapplication.sh" dove
runapplication.sh e' lo script che imposta l'ambiente per esegire il
programma e lancia la jvm e in questo modo viene richiesta la password di
root prima di lanciare il programma.
Per evitare l'inserimento della password e garantire la possibilita' di
esecuzione ad un gruppo controlato di utenti credo si possa usare "sudo"
anche se non ne ho mai avuto occasione.
Alessandro.

 Sicuramente puoi farlo con "su - -c runapplication.sh"
Hem, "su-c runapplication.sh"
Alessandro.

> Sicuramente puoi farlo con "su - -c runapplication.sh"
Aridaje, "su -c runapplication.sh"
Alessandro.

 anche se non ne ho mai avuto occasione.
Ho visto un po' che fà, sembrerebbe fare al caso mio! Ora vedo un po se
funziona...
-- 
Ciao da ALEX! :)
Linux Registered User #279209


 password di root!
Allora IMO l'unica soluzione e` di scrivere un server che giri in
background coi permessi di root e con tutti i crismi di sicurezza e poi un
client che si interfacci col server e da quello riceva i dati (e solo
quelli) che il server vuole mandargli.
Bye.