mirror of
https://github.com/yeasy/docker_practice.git
synced 2026-03-12 04:41:17 +00:00
style: apply global formatting fixes (struct, spacing, zhlint)
This commit is contained in:
@@ -28,7 +28,9 @@ flowchart LR
|
||||
|
||||
## 核心安全机制
|
||||
|
||||
### 1. 命名空间(Namespace)
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
### 1。命名空间
|
||||
|
||||
提供进程、网络、文件系统等资源的隔离:
|
||||
|
||||
@@ -41,9 +43,9 @@ flowchart LR
|
||||
| IPC | 进程通信 | 隔离共享内存 |
|
||||
| UTS | 主机名 | 独立主机名 |
|
||||
|
||||
详见 [命名空间](../../14_implementation/14.2_namespace.md) 章节。
|
||||
详见[命名空间](../../14_implementation/14.2_namespace.md)章节。
|
||||
|
||||
### 2. 控制组(Cgroups)
|
||||
### 2。控制组
|
||||
|
||||
限制容器的资源使用,防止资源耗尽攻击:
|
||||
|
||||
@@ -61,7 +63,7 @@ $ docker run --cpus=1.5 myapp
|
||||
$ docker run --device-write-bps /dev/sda:10mb myapp
|
||||
```
|
||||
|
||||
### 3. 能力机制(Capabilities)
|
||||
### 3。能力机制
|
||||
|
||||
Linux 将 root 权限拆分为多个细粒度的能力。Docker 默认禁用危险能力:
|
||||
|
||||
@@ -87,6 +89,8 @@ $ docker exec myapp cat /proc/1/status | grep Cap
|
||||
|
||||
## 镜像安全
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
### 使用可信镜像
|
||||
|
||||
运行以下命令:
|
||||
@@ -149,7 +153,9 @@ $ cosign verify --key cosign.pub $IMAGE
|
||||
|
||||
## 运行时安全
|
||||
|
||||
### 1. 非 root 用户运行
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
### 1。非 root 用户运行
|
||||
|
||||
> 笔者强调:这是最重要的安全实践之一。
|
||||
|
||||
@@ -179,7 +185,7 @@ CMD ["node", "server.js"]
|
||||
$ docker run -u 1001:1001 myapp
|
||||
```
|
||||
|
||||
### 2. 只读文件系统
|
||||
### 2。只读文件系统
|
||||
|
||||
运行以下命令:
|
||||
|
||||
@@ -193,7 +199,7 @@ $ docker run --read-only myapp
|
||||
$ docker run --read-only --tmpfs /tmp --tmpfs /var/run myapp
|
||||
```
|
||||
|
||||
### 3. 禁用特权模式
|
||||
### 3。禁用特权模式
|
||||
|
||||
运行以下命令:
|
||||
|
||||
@@ -207,7 +213,7 @@ $ docker run --privileged myapp
|
||||
$ docker run --cap-add=SYS_TIME myapp
|
||||
```
|
||||
|
||||
### 4. 限制资源
|
||||
### 4。限制资源
|
||||
|
||||
运行以下命令:
|
||||
|
||||
@@ -220,7 +226,7 @@ $ docker run \
|
||||
myapp
|
||||
```
|
||||
|
||||
### 5. 网络隔离
|
||||
### 5。网络隔离
|
||||
|
||||
运行以下命令:
|
||||
|
||||
@@ -239,7 +245,9 @@ $ docker run --network=isolated_net myapp
|
||||
|
||||
## Dockerfile 安全实践
|
||||
|
||||
### 1. 使用精简基础镜像
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
### 1。使用精简基础镜像
|
||||
|
||||
Dockerfile 内容如下:
|
||||
|
||||
@@ -255,7 +263,7 @@ FROM node:22 # ~1GB
|
||||
FROM ubuntu:24.04 # ~78MB
|
||||
```
|
||||
|
||||
### 2. 多阶段构建
|
||||
### 2。多阶段构建
|
||||
|
||||
Dockerfile 内容如下:
|
||||
|
||||
@@ -275,7 +283,7 @@ USER node
|
||||
CMD ["node", "/app/server.js"]
|
||||
```
|
||||
|
||||
### 3. 不存储敏感信息
|
||||
### 3。不存储敏感信息
|
||||
|
||||
Dockerfile 内容如下:
|
||||
|
||||
@@ -292,7 +300,7 @@ COPY .env /app/
|
||||
...
|
||||
```
|
||||
|
||||
### 4. 固定依赖版本
|
||||
### 4。固定依赖版本
|
||||
|
||||
Dockerfile 内容如下:
|
||||
|
||||
@@ -329,6 +337,8 @@ RUN apk add curl
|
||||
|
||||
## 高级安全方案
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
### Seccomp 系统调用过滤
|
||||
|
||||
限制容器可以使用的系统调用:
|
||||
@@ -345,7 +355,7 @@ $ docker run --security-opt seccomp=/path/to/profile.json myapp
|
||||
$ docker run --security-opt apparmor=docker-default myapp
|
||||
```
|
||||
|
||||
### 安全容器(gVisor / Kata)
|
||||
### 安全容器 (gVisor / Kata)
|
||||
|
||||
需要更强隔离时:
|
||||
|
||||
@@ -361,18 +371,18 @@ $ docker run --runtime=runsc myapp
|
||||
|
||||
随着软件供应链攻击日益频繁,仅保障运行时安全已不足够。
|
||||
|
||||
### 1. SBOM(软件物料清单)
|
||||
### 1。SBOM (软件物料清单)
|
||||
|
||||
SBOM 类似于食品的配料表,列出了容器镜像中包含的所有软件包及其版本。
|
||||
|
||||
- **生成 SBOM**: 使用 `docker buildx build --sbom` 或 `docker scout sbom`。
|
||||
- **管理 SBOM**: 确保持续监控 SBOM 中的组件是否存在新披露的漏洞。
|
||||
- **生成 SBOM**:使用 `docker buildx build --sbom` 或 `docker scout sbom`。
|
||||
- **管理 SBOM**:确保持续监控 SBOM 中的组件是否存在新披露的漏洞。
|
||||
|
||||
### 2. 镜像签名(Sigstore / Notary v2)
|
||||
### 2。镜像签名 (Sigstore / Notary v2)
|
||||
|
||||
确保镜像在构建后未被篡改,且确实来自可信的发布者。
|
||||
|
||||
- **Cosign**: Sigstore 项目的一部分,用于签署和验证容器镜像。
|
||||
- **Cosign**:Sigstore 项目的一部分,用于签署和验证容器镜像。
|
||||
```bash
|
||||
## 使用有写权限的仓库地址
|
||||
$ export IMAGE=<你的仓库地址>/myimage:tag
|
||||
|
||||
Reference in New Issue
Block a user