为什么 CapEff 在 /proc/$PID/status 中全为零
Why is CapEff all zeros in /proc/$PID/status
我从 ping 二进制文件中删除了 setuid 位并添加了 cap_net_raw+p
,如下所示:
$ chmod 755 /bin/ping
$ setcap cap_net_raw+p /bin/ping
然后我在一个终端中 运行 ping
并从另一个终端检查 运行 进程的 /proc/$PID/status:
$ ps aux | grep ping
user 5468 0.0 0.0 14948 1792 pts/20 S+ 11:14 0:00 ping www.google.com
user 5471 0.0 0.0 14224 896 pts/2 S+ 11:14 0:00 grep --color=auto ping
$ cat /proc/5468/status | grep Cap
CapInh: 0000000000000000
CapPrm: 0000000000002000
CapEff: 0000000000000000
CapBnd: 0000003fffffffff
CapAmb: 0000000000000000
如果 ping
目前是 运行 为什么是 CapEff: 0000000000000000
? cap_net_raw
不应该也在有效集中吗? /proc/$PID/status 不反映线程的 current 状态吗?
OFTC (irc) 的#kernelnewbies 中的一位乐于助人的人非常友好地为我提供了答案。
ping
在有效集合中设置 cap_net_raw
,创建套接字,然后丢弃 cap_net_raw
,如使用 strace 所见:
$ strace -e socket,capset ping -c1 localhost
capset({_LINUX_CAPABILITY_VERSION_3, 0}, {CAP_NET_RAW, CAP_NET_ADMIN|CAP_NET_RAW, 0}) = 0
socket(PF_INET, SOCK_RAW, IPPROTO_ICMP) = 3
capset({_LINUX_CAPABILITY_VERSION_3, 0}, {0, CAP_NET_ADMIN|CAP_NET_RAW, 0}) = 0
打开套接字后,不再需要任何特权即可写入。
我从 ping 二进制文件中删除了 setuid 位并添加了 cap_net_raw+p
,如下所示:
$ chmod 755 /bin/ping
$ setcap cap_net_raw+p /bin/ping
然后我在一个终端中 运行 ping
并从另一个终端检查 运行 进程的 /proc/$PID/status:
$ ps aux | grep ping
user 5468 0.0 0.0 14948 1792 pts/20 S+ 11:14 0:00 ping www.google.com
user 5471 0.0 0.0 14224 896 pts/2 S+ 11:14 0:00 grep --color=auto ping
$ cat /proc/5468/status | grep Cap
CapInh: 0000000000000000
CapPrm: 0000000000002000
CapEff: 0000000000000000
CapBnd: 0000003fffffffff
CapAmb: 0000000000000000
如果 ping
目前是 运行 为什么是 CapEff: 0000000000000000
? cap_net_raw
不应该也在有效集中吗? /proc/$PID/status 不反映线程的 current 状态吗?
OFTC (irc) 的#kernelnewbies 中的一位乐于助人的人非常友好地为我提供了答案。
ping
在有效集合中设置 cap_net_raw
,创建套接字,然后丢弃 cap_net_raw
,如使用 strace 所见:
$ strace -e socket,capset ping -c1 localhost
capset({_LINUX_CAPABILITY_VERSION_3, 0}, {CAP_NET_RAW, CAP_NET_ADMIN|CAP_NET_RAW, 0}) = 0
socket(PF_INET, SOCK_RAW, IPPROTO_ICMP) = 3
capset({_LINUX_CAPABILITY_VERSION_3, 0}, {0, CAP_NET_ADMIN|CAP_NET_RAW, 0}) = 0
打开套接字后,不再需要任何特权即可写入。