首页 > 解决方案 > linux 容器中的 setcap cap_net_admin 阻止用户访问每个文件

问题描述

我在 CentOS 容器中有一个 tcpdump 应用程序。我试图以非 root 用户身份运行 tcpdump。在此论坛帖子之后:https : //askubuntu.com/questions/530920/tcpdump-permissions-problem(以及其他一些加强了这一点的文档),我尝试在容器中使用 setcap cap_net_admin+eip /path/to/tcpdump。

运行此程序后,我尝试以不同的用户身份运行 tcpdump(具有 tcpdump 的权限),我得到“不允许操作”。然后,我尝试以以前一直在工作的 root 身份运行它,并且得到“不允许操作”。运行 getcap 后,我验证了权限是应有的。我认为这可能是我的特定用例,所以我尝试对其他几个可执行文件运行 setcap 命令。在我运行 setcap -r /filepath 之前,每个可执行文件都返回“不允许操作”。

关于如何解决这个问题的任何想法,甚至在不使用 root 运行 tcpdump 的情况下解决它?

标签: linuxdockerpermissionscentoscentos7

解决方案


NET_ADMIN 功能默认不包含在容器中,因为它可以允许容器进程修改和转义应用于容器的任何网络隔离设置。因此,在二进制文件上显式设置此权限setcap将会失败,因为 root 和容器中的所有其他用户都被阻止了该功能。要使用它运行容器,您需要使用用于启动容器的命令将此功能添加到容器中。例如

docker run --cap-add NET_ADMIN ...

但是,我相信您所需要的只是 NET_RAW (setcap cap_net_raw),它包含在默认功能中。来自man capabilities

   CAP_NET_RAW
          * Use RAW and PACKET sockets;
          * bind to any address for transparent proxying.

推荐阅读