dir*_*has 10 linux ubuntu wireshark libpcap linux-capabilities
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)
并检查它是否正确:
getcap a.out
Run Code Online (Sandbox Code Playgroud)
这给了我
a.out = cap_net_admin,cap_net_raw+eip
Run Code Online (Sandbox Code Playgroud)
跑步a.out给了我:
./a.out eth0
eth0: You don't have permission to capture on that device (socket: Operation not permitted)
Run Code Online (Sandbox Code Playgroud)
sudo按预期运行(程序不打印任何内容并退出).
这里有一个有趣的现象:如果我提出a.out来/usr/bin(并重新应用功能),它的工作原理.反之亦然:服用启用的功能- /usr/bin/dumpcap从wireshark(其中在用户正常工作wireshark组)和移动它出来的/usr/bin,说我的家目录,重新应用相同的能力,它不工作.搬回来,它的工作原理.
SO:为什么这些功能仅适用于/usr/bin(和/usr/sbin),而不适用于其他地方?这可以在某个地方配置吗?
Gra*_*ing 12
这可能是因为您的主目录已挂载nosuid,这似乎阻止了功能的运行.Ubuntu加密主目录,并使用ecryptfs作为nosuid进行安装.
有能力的二进制文件我的工作/usr/,和/home/,但不是我的主目录.
我能找到的唯一能够nosuid击败能力的参考资料是:http://www.gossamer-threads.com/lists/linux/kernel/1860853#1860853.我很想找到一个权威的来源.
| 归档时间: |
|
| 查看次数: |
7742 次 |
| 最近记录: |