---
title: 容器镜像和构建文件配置规则
description: "在dockerfile中为容器镜像创建一个非root用户。如有可能，通过非root用户运行容器。尽管可以映射用户命名空间，但如果已经在容器镜像中定义了一个用户，该容器默认由该用户运行，无需再进行用户命名空间重映射。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/2300/armnative/kunpengcpskbox_20_0109.html
sourcePath: /source/zh/kunpengboostkithistory/2300/armnative/kunpengcpskbox_20_0109.html
indexId: 6e579c673a51c2f6185eb8841bab1b5f63ca08b9e1a5a1dd448c154c63b8f9f876
---
# 容器镜像和构建文件配置规则

#### 为容器镜像创建一个非root用户

在dockerfile中为容器镜像创建一个非root用户。如有可能，通过非root用户运行容器。尽管可以映射用户命名空间，但如果已经在容器镜像中定义了一个用户，该容器默认由该用户运行，无需再进行用户命名空间重映射。

Kbox未创建非root用户，请根据业务需求确认是否需要创建非root用户，若自行创建非root用户，可能存在兼容性问题。


#### 扫描和重建镜像，及时加入安全补丁

应经常扫描镜像，查找漏洞。重建镜像，便于及时加入补丁，并创建新的容器实例。漏洞是可以被利用的缺陷，而安全补丁则是可以解决这些漏洞的更新。可以使用镜像漏洞扫描工具检测镜像中任何形式的漏洞，并查找可用的补丁，以规避这些漏洞。补丁会将系统更新到最新的代码库。使用最新的代码库十分重要，供应商在修复问题时会关注这一点。在使用前对安全补丁进行评估，并遵循打补丁的最佳实践。另外，镜像漏洞扫描工具最好能够执行二进制分析或基于哈希的验证，而不仅仅是版本字符串匹配。


#### 禁止在Dockerfile中使用ADD指令操作不可信文件

dockerfile中的ADD指令可以从远程URL检索文件，并自动执行解包等操作。从远程URL获取文件由于不可信，需要扫描文件是否恶意或带有漏洞，如未经扫描就添加来自URL的恶意文件，或解包带漏洞的程序会给系统带来风险，例如：自动解压恶意压缩包导致系统重要文件被替换等。因此直接使用ADD指令操作远程不可信文件会存在安全风险。


#### 不在Dockerfile中存储机密信息

使用docker history等Docker命令以及各种工具和程序可以轻松回溯Dockerfile。另外，镜像发布商通常会提供Dockerfile，证明其镜像的可信性。因此，这些Dockerfile里的敏感信息很容易被暴露和利用。不在dockerfile中存储任何敏感信息。对于从外部获取的image内置软件，应当检查其中是否有内置账号/密钥等，避免形成后门。


#### 开启Content trust

Content trust可以允许Docker发布者对他们发布的内容进行签名，完善整个信任分发机制。当用户从Registry中pull镜像时，用户会收到包含发布者公钥的证书，从而允许用户验证镜像的完整性和真实性。开启Content trust后，Docker引擎将只对已签名的镜像进行操作，并拒绝运行签名或摘要不匹配的镜像。默认情况下是没有开启Content trust的。


#### 在容器镜像中加入健康检查

在dockerfile容器镜像中加入健康检查可以让容器正常运行后，通过周期性的检查容器，确认容器的运行状态是否正常，如果检查到停止运行或者运行异常的容器，可以产生检查报告告警，并及时作出响应，如重启容器，或者重新实例化一个新容器。


#### 不要单独使用，或者在单行命令中使用update更新指令

在dockerfile的单行语句中使用update更新指令，会缓存在update层，这样当你使用相同的命令构建镜像时，会使用之前在update层缓存的命令。这可能会拒绝这些命令在以后的版本中进行任何更新。
