我想在 Docker 容器中运行 Nmap 工具,但不使用默认的 root 用户帐户。我已经通过 setcap 设置了(希望)正确的功能。不幸的是,当我尝试运行它时,我只收到“操作不允许”错误。
这是我的docker文件:
FROM registry.access.redhat.com/ubi8/ubi-minimal:8.3
ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en'
RUN microdnf install nmap which
RUN setcap cap_net_raw,cap_net_admin,cap_net_bind_service+eip $(which nmap)
USER 1001
CMD ["nmap", "--privileged", "-sU", "localhost"]
有什么办法可以修复这个问题吗?
答案1
这里的问题是“cap_net_admin”。
为了在容器内使用/设置此功能,容器必须使用“NET_ADMIN”功能运行。
# docker run --cap-add NET_ADMIN <...>
或者简单地从 setcap 语句中省略“cap_net_admin”就可以了。
但是,要按照您想要的方式运行 nmap,您只需要“cap_net_raw”功能。
将 dockerfile setcap 命令简化为:
RUN setcap cap_net_raw+eip $(which nmap)