计算任何进程的最小 Linux 功能集的最佳方法是什么?
假设您正在强化操作系统,并且其中一些工具可能需要CAP_NET_ADMIN和相关的网络权限,而其他工具可能需要CAP_SYS_NICE。应该有一种方法来告诉每个可执行文件真正需要哪些功能。
我从 ping 二进制文件中删除了 setuid 位,并添加了cap_net_raw+p如下内容:
$ chmod 755 /bin/ping
$ setcap cap_net_raw+p /bin/ping
Run Code Online (Sandbox Code Playgroud)
然后我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
Run Code Online (Sandbox Code Playgroud)
如果ping当前正在运行,为什么CapEff: 0000000000000000?不应该cap_net_raw也在有效集中吗?/proc/$PID/status 不反映线程的当前状态吗?