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

标签 linux docker kubernetes alpine-linux

我基本上是尝试以 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/

相关文章:

linux - CRONJOB 没有运行 .sh 文件

docker - K8S iptables与Pod内的一个容器之间的关系

docker - 在Linux/Windows集群上部署服务时Kubernetes “Failed create pod sandbox”错误

kubernetes - Kubectl 导出已弃用。任何替代品

kubernetes - Rancher v3 Api 文档不可用

linux - Init.d 脚本导致启动挂起

c# - 在 Linux 上使用 Mono 上的 system.windows.forms 进行开发

docker - Confluent 控制中心使用 "exit 1"定期关闭

docker - 如何更改从 'Registry' 显示的 'docker info' 值

c++ - 通过套接字从 Linux 向 Windows 机器发送空字节 - 会相同吗