开始的时候我是在终端中使用sudo 命令打开 wireshark 的,因为如果不这样的话 wireshark 就没法抓包啊。偶尔抓一次包就使用这样的方式提权。
今天使用 wireshark 的时候特意留意了一下 wireshark 的提示信息,大致就是告诉我,使用 root 权限,危险!!
那一定有解决办法喽,当然。提示信息里给出了这个网址:https://wiki.wireshark.org/CaptureSetup/CapturePrivileges
里面给出了好几种解决方法,我这里只说一下我在我的archlinux中使用的方法。
1. 假设你安装 wireshark 时的依赖包中的 dumpcap 这个软件的位置是 /bin/dumpcap
2. 设置 dumpcap 归 root 所有,属于 wireshark 组。(wireshark 组在我安装wireshark的时候是自动创建的)
chown root:wireshark /bin/dumpcap
3. 安全起见,为 dumpcap 去掉 other 的权限。
chmod o-rwx /bin/dumpcap
4. 为 dumpcap 设置 setuid,让其在执行的时候拥有 root 的权限。
chmod u+s /bin/dumpcap
5. 将你想用来启动 wireshark 的用户添加进 wireshark 组中,假设用户名是 userone。
usermod -a -G wireshark userone
6. 完成!这种做法的原理是借助 setuid 进行提权,而且为 dumpcap 去掉 other 的执行权限来防止被滥用。
ps:将用户添加进 wireshark 组之后可能不会立即生效,反正我是重新登录之后才生效的。
#########20180624更新########
今天又重新安装了一下 wireshark,安装的时候参照archlinux 的wiki 进行配置。发现archlinux 的wiki中并没有提到要为/bin/dumpcap文件设置 setuid,而是只说只要将用户加入到wireshark组中即可,试了一下,果然可以。
跟着wiki 的链接找到了wireshark 官网的说明,https://wiki.wireshark.org/CaptureSetup/CapturePrivileges#Most_UNIXes
官网提到了两种方式:
1.Setting network privileges for dumpcap if your kernel and file system support file capabilities
2.Setting network privileges for dumpcap if your kernel and file system don't support file capabilities
其中第二种就是之前说过的setuid的方式。
至于第一种,是用 setcap 命令为文件设置capabilities 的方式。
设置方式是执行命令:setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' /usr/bin/dumpcap
若使用第一种方式,这样就不用为 /bin/dumpcap 文件设置setuid了,这个文件的所属用户和所属组分别是 root 和 wireshark,权限为 0754,这样就保证了非root用户和不在wireshark组中的用户没有执行权限。
对于capabilities是什么,这是相关的man手册:http://man7.org/linux/man-pages/man7/capabilities.7.html
capabilities的使用是为了细分超级用户的权限。
capabilities需要kernel和文件系统的支持。