一、如何确认容器是否使用root用户启动程序
需要用root用户运行Docker?
组织中,经常以Root用户运行Docker中的容器。但是你的工作负载真的需要root权限吗?显然很少。尽管如此,默认情况下,你的容器仍将以root用户身份运行。但这可能会带来严重的安全问题。实际上,如果以root用户运行容器内部的进程,就是以root用户身份运行主机的进程。这就为那些恶意访问主机的攻击者,提供了机会。
只需在常用的任何镜像上使用以下命令,你就可以自己查看它使用的用户身份,
步骤1:通过指令 docker ps 查看运行的容器的:
docker ps |grep centos_arm:v5
步骤2:通过指令 docker inspect --format ‘{{.State.Pid }}’ 查看运行容器的:
docker inspect --format '{{.State.Pid }}' 900d14baebc5
步骤3:通过指令 ps -p -o pid,user 查看容器进程关联的主机用户:
ps -p 351228 -o pid,user
步骤4:判断容器进程是否以 root 身份运行,如果是以root身份运行则不符合安全要求。
进入容器执行ps -ef
显然,作为最佳实践,我们应该避免以超级用户身份运行容器。因此,让我们看看如何以非root用户身份运行容器。
二、将非root用户添加到Dockerfile 通过在Dockerfile中使用RUN命令创建用户,这个用户仅具有容器内工作负载所需的权限。
通过在Dockerfile中使用RUN命令创建用户,这个用户仅具有容器内工作负载所需的权限。
创建程序用户
RUN useradd -g root -d /home/aifgw -s /bin/bash -m aifgw
将在系统中添加一个名为 aifgw 的新用户,其家目录为 /home/aifgw,默认 shell 为 bash,并将其初始组设置为 root
RUN usermod -aG root aifgw
RUN chage -M 99999 aifgw
使用 usermod 命令来修改已存在的用户 aifgw 的附加组
赋权给
RUN chown -R aifgw:root /home/aifgw/nginx
RUN chown -R aifgw:root /root
三、目录etc的文件如何变更
/etc/resolv.conf 配置域名解析的文件
/etc/hosts 主机Host文件
无法成功挂载到容器中
1、通过shell命名无法配置成功
2、通过修改基础镜像,/etc/resolv.conf 和 /etc/hosts,编译为容器后没有挂载成功,经过查询官方文档。
为 /etc/resolv.conf 和 /etc/hosts外置挂载,无法通过dockerfile挂载到容器中。
换一个思路:
通过docker数据卷挂载的方式,自定义配置
四、启动服务查看进程
启动服务查看进程如下为非root用户。
共勉篇,方法有很多种总有适合自己工作的一种
任何事情在做决定之前都应该思考,但只有这个意识还远远不够。考虑问题还存在很多深层次的规则和方法,我以为,考虑任何问题需要注意以下几项因素:
1.穷尽大脑思考这个问题的所有解决方案;
2.逐个分析每个方案的利弊,尤其是弊,也就是说如果选择某个方案的最坏结果可能是什么,以及一旦发生了这种最坏结果的应对方法;
3.筛选出最优的2至3个选项,并在做最终决定前对这几个方案进行合理逻辑推演,看哪一个有漏洞、哪一个有风险、哪一个更行得通;
4.做出最终决定,并留好plan B。