linux - 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 的情况下解决它?
解决方案
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.
推荐阅读
- python - 无法从 imblearn.over_sampling import SMOTE 导入
- java - RecyclerView 如何在某个位置执行滚动项到顶部?
- arrays - 在 SOAP 响应中访问数组上下文
- c# - 从后台工作人员修改控制。不存在
- php - 如何使用 REST API 登录和显示其他 html/php 页面
- python - 登录工作但 current_user 未通过身份验证
- bash - xrandr:如何检查是否镜像屏幕
- java - 帕斯卡的三角形模式突然破裂
- sql - 查询 SQL 时结果为空
- android - 在改造中的 AsyncTask 类中显示进度对话框