gpt4 book ai didi

docker - 为了安全起见,我应该以非 root 身份在 docker 容器内运行东西吗?

转载 作者:行者123 更新时间:2023-12-04 11:16:25 24 4
gpt4 key购买 nike

我已经运行我的 docker builddocker run没有sudo。但是,当我在 docker 容器中启动一个进程时,它在 top 上显示为 root 进程。在主机上(不在容器内)。
虽然由于命名空间和来自 docker 的 cgroups,它无法访问主机文件系统,但它是否仍然比以简单用户身份运行更危险?
如果是这样,以非 root 身份在 docker 内部运行事物的正确方法是什么?
我应该做吗USER nonroot在 Dockerfile 的末尾?
更新:
root 它也需要构建一些东西。我应该把USER在 Dockerfile 的最顶部,然后安装 sudo与其他依赖项一起使用,然后使用 sudo仅在构建中需要时?
有人可以在开始、安装和使用 sudo 中与 USER 一起给出一个简单的 Dockerfile 示例吗? ?

最佳答案

root 身份运行容器带来很多风险。虽然是root容器内部与root不一样在主机上(更多详细信息 here )并且您可以在启动期间拒绝很多操作,它仍然是推荐的方法。
通常使用 USER 是个好主意安装一些通用包/库后的指令。换句话说 - 在需要 root 的操作之后特权。我不建议安装 sudo在图像内 - 通常不需要。始终确保您指定的用户可以访问您需要的文件。通常你不需要事先创建用户,但如果你需要一些自定义的东西,你总是可以这样做。
这是在用户 my-service 下运行的 Java 应用程序的示例 Dockerfile。 :

FROM alpine:latest
RUN apk add openjdk8-jre
COPY ./some.jar /app/
ENV SERVICE_NAME="my-service"

RUN addgroup --gid 1001 -S $SERVICE_NAME && \
adduser -G $SERVICE_NAME --shell /bin/false --disabled-password -H --uid 1001 $SERVICE_NAME && \
mkdir -p /var/log/$SERVICE_NAME && \
chown $SERVICE_NAME:$SERVICE_NAME /var/log/$SERVICE_NAME

EXPOSE 8080
USER $SERVICE_NAME
CMD ["java", "-jar", "/app/some.jar"]
如您所见,我预先创建了用户并选择了它的 gid,禁用了它的 shell 和密码,因为它将成为一个“服务”用户。

关于docker - 为了安全起见,我应该以非 root 身份在 docker 容器内运行东西吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68155641/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com