你能否以root身份在Docker容器内启动进程,而exec调用的默认用户是非root用户?

问题描述 投票:3回答:1

我基本上试图以root身份运行crond -f,而默认用户则有所不同。

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

尝试过这样的事情:

USER root

CMD ["./runCrons.sh"]

USER newuser

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

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

linux docker kubernetes alpine
1个回答
1
投票

在构建Docker镜像时,创建属于sudo组的用户,并允许在没有密码的情况下运行所有​​sudo命令。

考虑下面的示例,它创建一个名为test的docker镜像,用户名为myuser with 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时不需要密码,所以一切都应该执行得很好,你应该好好去。

© www.soinside.com 2019 - 2024. All rights reserved.