我一直在尝试让一个应用程序正常运行,但它似乎无法找到任何网络接口。它设计为无需管理权限即可运行,因此需要特定的文件功能。但是,它仍然无法通过 libpcap 找到任何网络接口。
我尝试了一个简单的脚本来复制使用 libpcap 列出网络接口的行为,以便测试出问题:
#include <stdio.h>
#include <pcap.h>
int main(int argc, char *argv[]) {
char *dev, errbuf[PCAP_ERRBUF_SIZE];
dev = pcap_lookupdev(errbuf);
if(dev == NULL) {
printf("Error: %s\n", errbuf);
return(2);
}
printf("Device: %s\n", dev);
return(0);
}
应用文件功能并验证其是否已应用,
$ sudo setcap cap_net_raw,cap_net_admin=eip pcap_test
$ getcap pcap_test
pcap_test = cap_net_admin,cap_net_raw+eip
尽管它声称拥有正确的权限,但它仍然无法找到任何网络接口。当然,以超级用户身份运行是没有问题的。
$ ./pcap_test
Error: no suitable device found
$ sudo ./pcap_test
Device: eth0
按照这个相同的顺序在 Ubuntu 14.04(内核版本 3.13.0-35-generic 以及以前的版本)下可以按预期工作,但我无法让它在 Mint 17 或 17.1(内核版本 3.13.0-24-generic)下工作。
内核是否有任何影响文件功能的更改?我在网上找到的任何相关信息都是几年前的,并且与过时的内核有关。谢谢!
答案1
问题是由于我当时正在使用该nosuid
选项挂载的主分区上工作。我没有意识到该选项通过文件功能限制了 root 权限。
应用文件功能并从我的根分区(不带选项安装nosuid
)运行,工作正常。