TL; DR:为什么cap_net_raw
,cap_net_admin
功能只能在/usr/bin
(或/usr/sbin
)中工作,而不能在其他地方工作?这可以在某个地方配置吗?
我在使用Ubuntu 14.04中的libpcap为我的C程序分配功能时遇到了问题.即使在使用setcap(8)
和使用它来分配功能之后getcap(8)
,我仍然会收到权限错误.似乎功能仅适用于\usr\bin
朋友中的可执行文件.
我的程序test.c
如下:
#include <stdio.h>
#include <pcap.h>
int main(int argc, char **argv) {
if (argc != 2) {
printf("Specify interface \n");
return -1;
}
char errbuf[PCAP_ERRBUF_SIZE];
struct pcap* pcap = pcap_open_live(argv[1], BUFSIZ, 1, 0, errbuf);
if (pcap == NULL) {
printf("%s\n", errbuf);
return -1;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
并编译
gcc test.c -lpcap
Run Code Online (Sandbox Code Playgroud)
生成a.out
可执行文 我设置了功能:
sudo setcap cap_net_raw,cap_net_admin=eip ./a.out
Run Code Online (Sandbox Code Playgroud)
并检查它是否正确: …