rootの許可なしに現在のワイヤレスSSIDを取得する方法はありますか?linux:root権限を持たない無線ssidを取得するには?
iwconfigは私にESSIDを通知しますが、ルートとして実行する場合に限ります。
rootの許可なしに現在のワイヤレスSSIDを取得する方法はありますか?linux:root権限を持たない無線ssidを取得するには?
iwconfigは私にESSIDを通知しますが、ルートとして実行する場合に限ります。
あなたはiwconfig
(wireless_tools)のソースコードを見てみる場合は、この行が表示されます:
iwconfig.c:639: if(iw_get_ext(skfd, ifname, SIOCGIWESSID, &wrq) < 0)
この行は、ESSID(wireless.h)の取得のために責任があります。そして、私はrootだけがこれを行うための権限を持っていると思うので、(iwlib.h
からwireless_tools
パッケージまで)で(Operation not permitted
)を呼び出します。
sudo chmod u+s /sbin/iwconfig
あなたはまた、いくつかにハッキングをしようとすることができます:
は、ユーザーがiwconfig
コマンドを使用できるようにsetuid
を使用します。
/*------------------------------------------------------------------*/
/*
* 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));
}
あなたは2つのソリューションを持っています特定のユーザにいくつかの特定の機能を許可するCAP_NET_ADMIN
機能。 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/
最後に、あなたがすべてのシステムコールをトレースするstrace
を使用することができますし、ioctl
呼び出しがあることを確認しますそここのためsponsible:
#strace /sbin/iwconfig your_interface_name > strace_iwconfig_root.log
そして通常のユーザーと同じ:
$strace /sbin/iwconfig your_interface_name > strace_iwconfig_normal.log
、結果を比較
root
としては、これを行います。
素晴らしい! chmod u + sやCAP_NET_ADMINとCAP_NET_ADMINで何かするのはとてもうまくいきます。どうもありがとうございました! – npcode
@npcode:ありがとう、よろしいですか? – TOC
'network-manager'がシステムにインストールされていれば、これを回避することができます。次に、(バージョンに応じて) 'nm-tool'または' nmctl'を使用することができます。私のジオロケーションライブラリにはサンプルコードがあります。https://github.com/privatwolke/geolocation –
通常のユーザーとして実行するとどうなりますか?どのLinuxディストリビューションを使用していますか?また、あなたは[unix.se]がそのような質問に対してより適切なサイトを見つけるかもしれません。 –