end*_*and 5 linux capabilities docker
当我在 docker 容器中运行命令时,我看到:
# ip netns exec 9ee961d90990 ifconfig
setting the network namespace "9ee961d90990" failed: Operation not permitted
Run Code Online (Sandbox Code Playgroud)
我可以直接启动具有扩展功能的容器(我已经添加了net_admin一个),但是有什么方法可以检查运行此命令所需的系统功能?
可以启动容器--privileged来执行此操作并践踏与 docker 相关的所有安全性,但我宁愿尽可能避免这样做。这样做确实允许上述命令成功。
根据setns(2) 手册页,您需要CAP_SYS_ADMIN加入目标网络命名空间。但您可能需要额外的功能,因为setns()与文件描述符一起使用/run/netns/...。您没有告诉您如何创建此网络名称空间,因此我假设它是通过创建的ip netns add ...,因此无论如何它都是指向(名称空间文件系统)的绑定安装的网络名称空间nsfs。
由于/run/netns/...通常是根区域,因此您可能也需要CAP_DAC_OVERRIDE或CAP_DAC_READ_SEARCH,另请参阅features(7) 手册页。也可能是CAP_SYS_PTRACE因为对许多/procinode 的访问进一步受到 ptrace 功能的限制。