¿Hay alguna forma de obtener el SSID inalámbrico actual sin el permiso de root?linux: ¿Cómo obtener ssid inalámbrico sin permiso de root?
iwconfig me dice ESSID, pero solo si lo ejecuto como root.
¿Hay alguna forma de obtener el SSID inalámbrico actual sin el permiso de root?linux: ¿Cómo obtener ssid inalámbrico sin permiso de root?
iwconfig me dice ESSID, pero solo si lo ejecuto como root.
Si se echa un vistazo al código fuente de la iwconfig
(wireless_tools), verá esta línea:
iwconfig.c:639: if(iw_get_ext(skfd, ifname, SIOCGIWESSID, &wrq) < 0)
Esta línea es responsable de la escapada de ESSID (wireless.h). Y creo que solo root tiene permisos (listos para usar) para hacer esto, por lo que la función iw_get_ext
(definida en iwlib.h
del paquete wireless_tools
) que llama a ioctl
devolverá 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));
}
usted tiene 2 soluciones:
utilizar el setuid
para permitir al usuario utilizar iwconfig
comando:
sudo chmod u+s /sbin/iwconfig
También puede tratar de hacer un poco de piratería con la capacidad CAP_NET_ADMIN
que permite algunas capacidades específicas a un usuario específico. Aquí hay varios enlaces sobre 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/
Por último, puede utilizar strace
de rastrear todas las llamadas al sistema y para confirmar que ioctl
llamada es ahí ponsable para esto:
como root
hacer esto:
#strace /sbin/iwconfig your_interface_name > strace_iwconfig_root.log
Y lo mismo que usuario normal:
$strace /sbin/iwconfig your_interface_name > strace_iwconfig_normal.log
y comparar los resultados.
¡Genial! Los chmod u + s o hacer algo con CAP_NET_ADMIN y CAP_NET_ADMIN funcionan bien. ¡Muchas gracias! – npcode
@npcode: ok gracias, de nada. – TOC
Puede solucionar esto si 'network-manager' está instalado en el sistema. Entonces puede (según la versión) usar 'nm-tool' o' nmctl'. Mi biblioteca de geolocalización tiene un código de ejemplo, ver: https://github.com/privatwolke/geolocation –
¿Qué ocurre si lo ejecuta como un usuario normal? ¿Qué distribución de Linux usas? Además, puede encontrar [unix.se] un sitio más adecuado para tales preguntas. –