C'è un modo per ottenere l'SSID wireless corrente senza il permesso di root?linux: come ottenere ssid wireless senza permesso di root?
Iwconfig mi dice ESSID, ma solo se lo eseguo come root.
C'è un modo per ottenere l'SSID wireless corrente senza il permesso di root?linux: come ottenere ssid wireless senza permesso di root?
Iwconfig mi dice ESSID, ma solo se lo eseguo come root.
Se si dà un'occhiata al codice sorgente del iwconfig
(wireless_tools), vedrete questa linea:
iwconfig.c:639: if(iw_get_ext(skfd, ifname, SIOCGIWESSID, &wrq) < 0)
Questa linea è responsabile per il get di ESSID (wireless.h). E penso che solo root abbia i permessi (pronti all'uso) per fare questo, quindi la funzione iw_get_ext
(definita nel pacchetto iwlib.h
dal pacchetto wireless_tools
) che chiama ioctl
restituirà EPERM
(Operation not permitted
).
/*------------------------------------------------------------------*/
/*
* Wrapper to extract some Wireless Parameter out of the driver
*/
static inline int
iw_get_ext(int skfd, /* Socket to the kernel */
const char * ifname, /* Device name */
int request, /* WE ID */
struct iwreq * pwrq) /* Fixed part of the request */
{
/* Set device name */
strncpy(pwrq->ifr_name, ifname, IFNAMSIZ);
/* Do the request */
return(ioctl(skfd, request, pwrq));
}
Hai 2 soluzioni:
utilizzare il setuid
per consentire all'utente di utilizzare iwconfig
comando:
sudo chmod u+s /sbin/iwconfig
Si può anche provare a fare un po 'di hacking con la capacità CAP_NET_ADMIN
che consente alcune funzionalità specifiche a un utente specifico. Ecco alcuni collegamenti con CAP_NET_ADMIN
:
http://packetlife.net/blog/2010/mar/19/sniffing-wireshark-non-root-user/
http://www.lids.org/lids-howto/node48.html
http://lwn.net/Articles/430462/
Infine è possibile utilizzare strace
di tracciare tutte le chiamate di sistema e per confermare che ioctl
chiamata è Là sponsabile di questo:
come root
fare questo:
#strace /sbin/iwconfig your_interface_name > strace_iwconfig_root.log
E lo stesso normale utente:
$strace /sbin/iwconfig your_interface_name > strace_iwconfig_normal.log
e confrontare i risultati.
Ottimo! chmod u + s o fare qualcosa con CAP_NET_ADMIN e CAP_NET_ADMIN funzionano entrambi molto bene. Grazie mille! – npcode
@npcode: ok grazie, prego. – TOC
È possibile aggirare questo problema se 'network-manager' è installato nel sistema. Quindi puoi (a seconda della versione) usare 'nm-tool' o' nmctl'. La mia libreria di geolocalizzazione ha un codice di esempio, vedi: https://github.com/privatwolke/geolocation –
Cosa succede se lo si esegue come utente normale? Quale distribuzione Linux usi? Inoltre, potresti trovare [unix.se] un sito più adatto per tali domande. –