我基本上是尝试以 root 身份运行 crond -f
,同时让默认用户有所不同。
由于它运行的 crontabs 使用镜像上其他文件的敏感信息,我想授予对这些文件的 root 访问权限,启动 crond 进程,然后将用户切换到新创建的用户。这样,cronjobs 将能够获得他们需要的信息,同时保护容器中的敏感文件免受任何可能获得 exec 访问权限的人的侵害。
尝试过一些这样的事情:
USER root
CMD ["./runCrons.sh"]
USER newuser
但这并没有以 root 身份运行 crond 进程,而是以新用户身份运行。
如果有人有解决方案,我会省去一些挖掘和实验。
最佳答案
在构建 Docker 镜像时,创建一个属于 sudo 组的用户,可以在没有密码的情况下运行所有 sudo 命令。
考虑下面的例子,它创建了一个名为 test 的 docker 镜像,用户名为 myuser,使用 sudo pass:
$ 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
然后构建镜像:
docker build -t test
.
现在要解决标准用户的 cron 权限问题,请确保 cron 脚本上使用的所有命令都以 sudo 开头,如下所示。
CMD ["sudo ./runCrons.sh"]
由于在使用 sudo 时不需要密码,所以一切都应该正常执行,您应该可以开始了。
关于linux - 您能否以 root 身份在 Docker 容器内启动进程,同时让 exec 调用的默认用户为非 root 用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47876144/