読者です 読者をやめる 読者になる 読者になる

danishnetのブログ

「デキるネットワークエンジニアになるために。」

パケットキャプチャ - Wiresharkの「Capability(ケーパビリティ)」の設定について

ubuntu14.10のPCでパケットキャプチャするために
Wiresharkを起動して取得を開始したら以下の表示がされてエラーになってしまいました。

 

f:id:danishnet:20150614083107p:plain

The capture session could not be installed on interface wlan0(You don't have permission to capture on that device)...

 

 

どうやらデフォルトでは一般ユーザーではWiresharkでキャプチャするのを許可されてなく、

許可するために「Capability」の設定が必要らしい。
(カタカナ表記では「ケーパビリティ」が一般。)
今回取得したいインターフェースはwlan0(無線IF)です。


まずはwiresharkのインストール
$ sudo apt-get install wireshark

その後 setcapコマンド を実行すればCapability設定ができるようです。

(例)
$ sudo setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' /usr/bin/dumpcap


コマンドの詳細は下記のとおり


・Capability名
----------------------------------------------------------------------------------------------
Capability名               |  説明
----------------------------------------------------------------------------------------------
CAP_NET_ADMIN    |  さまざまなネットワークに関係する操作(ルーティングテーブルの変更など)を許可する
CAP_NET_RAW       |  RAWソケットとPACKETソケットの使用を許可する
----------------------------------------------------------------------------------------------
※定義されているCapabilityは/usr/include/linux/capability.h 内にある。

・Capability Set
コマンド中の文字 e,i,p をCapability Setといい、Capability Setの文字の意味は下記の通り
----------------------------------------------------------------------------------------------
文字                          |説明
----------------------------------------------------------------------------------------------
e (effective)実効       |実際に判定されるケーパビリティ
i  (inheritable)継承    |プロセスをexec()した際に継承するケーパビリティ
p (permitted)許可     |プロセスが持つことを許可されているケーパビリティ
----------------------------------------------------------------------------------------------

・キャプチャのプログラム
キャプチャを行うプログラムは/usr/bin/dumpcapにあり、
setcapコマンド実行時の末尾でそれを指定している。


またsetcapコマンドで設定した内容を getcapコマンド で確認する事が出来る。
以下の様に一連を実行してみました。


$ sudo getcap /usr/bin/dumpcap
$   ※はじめは何も表示されなかった
$
$ sudo setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' /usr/bin/dumpcap
$
$ sudo getcap /usr/bin/dumpcap
/usr/bin/dumpcap = cap_net_admin,cap_net_raw+eip
$

実行後は無事にパケットキャプチャを開始する事ができました。


ちなみにこのCapability設定を実行する前でもcapファイルを開くことはできました。
あくまでもパケットキャプチャを誰がどのように取得するのを許可するかという設定が、
Capabilityを設定するという事の様です。