ケイパビリティの設定

ちょっと wireshark でパケットでもキャプチャーしてみるけぇと思ったら
それを root で起動するなんてとんでもないと怒られたりするのでちゃんと設定する方法


簡単に要約するとパケットキャプチャを行う部分である /usr/bin/dumpcap に生のデータを扱うケイパビリティを設定してあげる事で怒られなくなる。


参考情報
http://linuxandxx.blog.fc2.com/blog-entry-39.html
http://www005.upp.so-net.ne.jp/develop-tom/deb/wireshark-deb.html
http://www.usupi.org/sysad/183.html


やってみた事
まず /usr/bin/dumpcap があるかどうか確認

$ ls -al /usr/bin/dumpcap
-rwxr-xr-x 1 root root 77080 Mar 11  2014 /usr/bin/dumpcap


ある。そして誰でも実行できるようになっている。
この後ケイパビリティを与えるが、それに先立って誰でも実行可能な状態を制限する。

$ sudo chmod o-x /usr/bin/dumpcap


これで所有者とグループにしか実行できなくなっている

$ ls -al /usr/bin/dumpcap
-rwxr-xr-- 1 root root 77080 Mar 11  2014 /usr/bin/dumpcap


専用のグループを作る(gid と名前は適当に)

$ sudo addgroup -gid 1500 packet_ops
Adding group `packet_ops' (GID 1500) ...
Done.


自分をグループに入れる。USER の所を適切に自分のアカウントに変更
尚、これは一度ログアウトしてログインしないと反映しないはず

$ sudo gpasswd -a USER packet_ops
Adding user USER to group packet_ops


対象の所有グループを先ほど作ったグループに変更する

$ sudo chgrp packet_ops /usr/bin/dumpcap


現在のケイパビリティを確認

$ getcap /usr/bin/dumpcap


ここで何も返ってこないのは何のケイパビリティもないから



ケイパビリティを与える

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


そして確認してみる

$ getcap /usr/bin/dumpcap 
/usr/bin/dumpcap = cap_net_admin,cap_net_raw+eip


今度は cap_net_admin と cap_net_raw に e と i と p が設定されてるのが確認できる。


この状態で root じゃなくても怒られなくなっているはず。
尚、ファイルのケイパビリティは owner や group を変更すると全部外れる模様。