如何确定命令需要哪些能力?

如何确定命令需要哪些能力?

当我在 docker 容器中运行命令时,我看到:

# ip netns exec 9ee961d90990 ifconfig
setting the network namespace "9ee961d90990" failed: Operation not permitted

我可以直接启动具有扩展功能的容器(我已经添加了该net_admin容器),但是有什么方法可以检查运行此命令需要什么系统功能?

可以启动容器来--privileged执行此操作并践踏与 docker 相关的所有安全性,但如果可能的话,我宁愿避免这样做。这样做确实可以使上述命令成功。

答案1

根据setns(2) 手册页您需要CAP_SYS_ADMIN加入目标网络命名空间。但您可能需要额外的功能,因为setns()与文件描述符一起使用/run/netns/...。您没有告诉您如何创建此网络名称空间,因此我假设它是通过创建的ip netns add ...,因此它是一个绑定安装的网络名称空间,指向nsfs(命名空间文件系统)无论如何。

由于/run/netns/...通常是根区域,因此您可能也需要CAP_DAC_OVERRIDECAP_DAC_READ_SEARCH,另请参阅功能(7) 手册页。也可能是CAP_SYS_PTRACE因为对许多 inode 的访问/proc进一步受到 ptrace 功能的限制。

相关内容