wireshark的命令行版本tshark是一個很好用的工具,對抓取的數據包有很強的解釋分析能力,還有基於協議、時間和會話的統計功能。
tshark抓取數據包需要root權限,但分析保存的數據包則沒有必要。更好的解決方法是使用dumpcap(也可以用tcpdump)將要分析的數據包dump出來,使tshark能以普通用戶權限載入這些數據包。這樣在抓取和分析數據包時,只有dumpcap(或tcpdump)這個程序需要root權限,相對要安全一些。
在linux kernel 2.6.24及以後的版本中,file POSIX capabilities功能已經完全可用,讓進程執行中的權限得到更有效的管理,其目標是使進程只擁有能正確執行的必要權限。下面我們會用到這一功能。
如果使用sudo執行tshark,會出現以下提示:
- test@localhost:~/test$ sudo tshark -i eth0
- [sudo] password for test:
- Running as user "root" and group "root". This could be dangerous.
- Capturing on eth0
解決辦法如下
1. 確認內核版本和參數支持file POSIX capabilities功能
- test@localhost:~/test$ uname -r
- 2.6.32-30-generic
- test@localhost:~/test$ grep FILE_CAPA /boot/config-2.6.32-30-generic
- CONFIG_SECURITY_FILE_CAPABILITIES=y
2. 安裝dumpcap軟件
- test@localhost:~/test$ sudo apt-get install pcaputils
3. 創建wireshark用戶
- test@localhost:~/test$ sudo useradd -s /usr/sbin/nologin wireshark
- test@localhost:~/test$ grep wireshark /etc/passwd
- wireshark:x:1002:1002::/home/wireshark:/usr/sbin/nologin
4. 更改dumpcap的用戶組
- test@localhost:~/test$ which dumpcap
- /usr/bin/dumpcap
- test@localhost:~/test$ sudo chgrp wireshark /usr/bin/dumpcap
5. 更改dumpcap的權限
- test@localhost:~/test$ sudo chmod 754 /usr/bin/dumpcap
6. 設置POSIX capabilities
- test@localhost:~/test$ sudo setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' /usr/bin/dumpcap
7. 嘗試以普通用戶權限運行tshark
- test@localhost:~/test$ tshark -i eth0
- Capturing on eth0
wireshark設置的文章來源
http://wiki.wireshark.org/CaptureSetup/CapturePrivileges
file POSIX capabilities的參考資料
http://www.friedhoff.org/posixfilecaps.html
http://www.sevagas.com/?POSIX-file-capabilities-the-dark