WSL2のUbuntuでtcpdumpができない
こんなエラー
tcpdump icmp を実行すると以下のような表示が出る
tomozo-hb@DESKTOP-QHUPT3N:~$ tcpdump icmp tcpdump: eth0: You don't have permission to capture on that device (socket: Operation not permitted)
やったこと
pcapというグループを作成し、自分自身を追加
tomozo-hb@DESKTOP-QHUPT3N:~$ sudo groupadd pcap [sudo] password for tomozo-hb:
tomozo-hb@DESKTOP-QHUPT3N:~$ sudo usermod -aG pcap $USER tomozo-hb@DESKTOP-QHUPT3N:~$ id $USER uid=1000(tomozo-hb) gid=1000(tomozo-hb) groups=1000(tomozo-hb),4(adm),20(dialout),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),117(netdev),1001(pcap)
正常に追加されたことを確認。
次に、tcpdumpのグループを変更。
tomozo-hb@DESKTOP-QHUPT3N:~$ ls -la /usr/sbin/tcpdump -rwxr-xr-x 1 root root 1044232 Jan 1 2020 /usr/sbin/tcpdump tomozo-hb@DESKTOP-QHUPT3N:~$ sudo chgrp pcap /usr/sbin/tcpdump tomozo-hb@DESKTOP-QHUPT3N:~$ ls -la /usr/sbin/tcpdump -rwxr-xr-x 1 root pcap 1044232 Jan 1 2020 /usr/sbin/tcpdump
最後に、tcpdumpに必要なcapabilityを追加する
tomozo-hb@DESKTOP-QHUPT3N:~$ sudo getcap /usr/sbin/tcpdump tomozo-hb@DESKTOP-QHUPT3N:~$ tomozo-hb@DESKTOP-QHUPT3N:~$ sudo setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' /usr/sbin/tcpdump tomozo-hb@DESKTOP-QHUPT3N:~$ tomozo-hb@DESKTOP-QHUPT3N:~$ sudo getcap /usr/sbin/tcpdump /usr/sbin/tcpdump = cap_net_admin,cap_net_raw+eip
CAP_NET_RAWはRAWソケットおよびPACKETソケットの使用許可、 CAP_NET_ADMINは各種ネットワーク関係の操作 を司っているらしい。 eipと指定したのはケーパビリティセットで、以下の意味らしい。 e: effective i: inheritable p: permitted
結果
無事に動作するようになった。
tomozo-hb@DESKTOP-QHUPT3N:~$ tcpdump icmp tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
(タイトルにWSL2とつけたが、別にWSL2の問題ではなかった)
参考記事
Wiresharkを一般ユーザで実行(ラズパイ編) - Qiita
https://www.websys.edu.uec.ac.jp/wp-content/uploads/eefd56627f941a0803b2fca181c080bd.pdf