您能否以 root 身份在 Docker 容器内启动进程,同时让 exec 调用的默认用户为非 root 用户?

bor*_*ude 5 linux docker kubernetes alpine-linux

我基本上试图以crond -froot身份运行,同时让默认用户有所不同。

由于它运行的 crontabs 使用来自图像上其他文件的敏感信息,我想授予这些文件的 root 访问权限,启动 crond 进程,然后将用户切换到新创建的用户。通过这种方式,cronjobs 将能够获得他们需要的信息,同时保护容器中的敏感文件免受任何可能获得 exec 访问的人的影响。

已经尝试了一些这样的事情:

USER root

CMD ["./runCrons.sh"]

USER newuser
Run Code Online (Sandbox Code Playgroud)

但这不会以 root 身份运行 crond 进程,而是以 newuser 身份运行。

如果有人有解决方案,它将为我节省一些挖掘和实验。

小智 2

在构建 Docker 镜像时,创建一个属于 sudo 组的用户,该用户无需密码即可运行所有 sudo 命令。

考虑下面的示例,它使用名为 myuser 的用户和 sudo pass 创建一个名为 test 的 docker 映像:

$ cat Dockerfile

FROM debian:latest
ENV user_name myuser
RUN apt-get update
RUN apt-get install -y sudo
RUN useradd --create-home -s /bin/bash ${user_name}
RUN echo "${user_name} ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/${user_name}
WORKDIR /home/${user_name}
USER ${user_name}
CMD /bin/bash
Run Code Online (Sandbox Code Playgroud)

然后构建图像:

docker build -t test

现在要修复标准用户的 cron 权限问题,请确保 cron 脚本上使用的所有命令都以 sudo 开头,如下所示。

CMD ["sudo ./runCrons.sh"]

由于使用 sudo 时不需要密码,因此一切都应该正常执行,您应该可以开始了。