2008/10/28

不用 sudo!以 non-root 身份用 Wireshark 抓封包

在 Ubuntu 上安裝好 Wireshark,想抓封包時卻找不到網路卡。原來必須執行 "sudo wireshark" 才有足夠的權限。這樣子除了麻煩之外,還有一個不方便:封包存檔之後是屬於 root 所有,處理起來相當不便。

經過一番努力,找出幾個解決方案 (越後面的方法越好)。

方案一

最簡單的作法是安裝完 Wireshark 之後執行 "sudo chmod u+s /usr/bin/dumpcap"。這樣子就可以一般使用者的身份抓封包了。關鍵在於 "dumpcap" 就是那個需要 root 權限的部份,上述指令讓一般使用者也可以 root 的身份執行 "dumpcap"。

這種方法雖然簡單,但對講求安全的人來說卻不太妙。因為所有人都可以執行這隻需要 root 權限的程式。方案二是一個改進的方法。

方案二

改進的方式就是只開放給特定 group 的人以 root 身份執行 "dumpcap":
  1. 執行 "sudo vi /etc/group" 並新增一個 group (建議叫做 "wireshark"),然後將自己加入此 group
  2. 執行 "sudo chgrp wireshark /usr/bin/dumpcap",將 dumpcap 改為 wireshark group
  3. 執行 "sudo chmod 4754 /usr/bin/dumpcap",只讓屬於 wireshark group 的人可以 root 身份執行 dumpcap
完成上述動作之後,重新登入讓 group 所屬生效。這樣你就可以用原本的身份抓封包了,封包存檔的所有也都屬於原本的身份。

方案三

方案二雖然已經限縮有執行權限的人,但終究還是以 root 身份執行 dumpcap。更嚴謹的方法是:利用 Linux Capabilities 只授權 dumpcap 有抓封包的權限。方法如下:
  1. 同方案二的步驟 1 和 2
  2. 執行 "sudo chmod 750 /usr/bin/dumpcap",只讓屬於 wireshark group 的人可以執行 dumpcap (以一般身份)
  3. 執行 "sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/dumpcap",授予 dumpcap 有抓封包所需的權限 (若沒有 setcap,請自己安裝 "sudo apt-get install libcap2-bin")
參考資料: