本文介绍了如何在Docker容器中使用非root权限执行脚本和命令的方法,提升安全性并减少潜在风险。
应用容器化之后,在Docker容器启动时,默认使用的是root用户执行命令,因此容器中的应用默认都是以root用户来运行的,存在很高的安全风险。那么如何能够使用非root的业务用户来运行应用呢?下面我将通过一个简单的例子来进行说明:在容器中使用自建的用户来运行一个简单的shell脚本,并且将该脚本输出的日志持久化到容器外部。
接下来让我们来看从制作镜像到启动容器的全过程。首先,构建镜像时我会采用Dockerfile的方式来完成这项任务,基础镜像是Ubuntu 14.04(需要先拉取此镜像:`docker pull ubuntu:14.04`)。以下是用于创建自定义用户和运行shell脚本的Dockerfile示例内容:
```
# 使用ubuntu 14.04作为构建的基础
FROM ubuntu:14.04
# 创建一个非root业务用户
RUN useradd -ms /bin/bash myuser \
&& echo myuser ALL=(ALL) NOPASSWD:ALL >> /etc/sudoers
# 将脚本段落件添加到容器中,这里假设脚本名为app.sh,并且放在/home/myuser目录下。
COPY app.sh /home/myuser/app.sh
RUN chmod +x /home/myuser/app.sh
# 设置容器启动时的用户为myuser
USER myuser
# 定义运行命令以执行shell脚本并输出日志到外部文件中
CMD [sh, -c, /home/myuser/app.sh > /path/to/logfile.log]
```