Remove blank lines after code block markers

This commit is contained in:
yeasy
2026-03-21 22:36:09 -07:00
parent 312f8fea42
commit 9ac19d79ee
132 changed files with 0 additions and 1517 deletions

View File

@@ -43,7 +43,6 @@ Docker 守护进程在启动容器时,会在后台为容器创建一套独立
"userns-remap": "default"
}
```
使用 `default` 值时Docker 会自动在宿主机上创建一个名为 `dockremap` 的用户和用户组
2. **验证子 UID 和子 GID 分配**
@@ -61,13 +60,11 @@ dockremap:165536:65536
```bash
$ sudo systemctl restart docker
```
#### 验证映射效果
我们可以运行一个简单的容器并执行 `sleep` 命令同时在宿主机上观察进程的所有者
```bash
## 在容器内以 root 身份运行
$ docker run -d --name userns_test alpine sleep 3600
@@ -75,7 +72,6 @@ $ docker run -d --name userns_test alpine sleep 3600
$ ps aux | grep sleep
165536 12345 0.0 0.0 1568 4 ? Ss 14:20 0:00 sleep 3600
```
你会发现尽管在容器内该进程是由 root 启动的但在宿主机上它的属主是 `165536`一个完全没有特权的用户
> [!TIP]

View File

@@ -38,7 +38,6 @@ $ docker run -d \
--memory-swap="512m" \
nginx:alpine
```
如果该容器内的应用尝试分配超过 512MB 的内存该进程将会被内核的 OOM Killer 杀掉但绝不会波及到宿主机的其他部分
#### 2. CPU 限制
@@ -60,7 +59,6 @@ $ docker run -d \
busybox \
md5sum /dev/urandom
```
即使上面的命令是一个死循环的哈希计算进程容器也永远无法吃满双核 CPU 系统的全部算力
#### 3. 进程数限制
@@ -80,7 +78,6 @@ $ docker run -d \
--pids-limit=100 \
python:alpine python app.py
```
当容器内的进程总数达到 100 任何尝试派生新进程的操作都会失败并返回 `Resource temporarily unavailable`从而挫败相关的攻击行为
### 18.2.3 最佳实践建议
@@ -98,5 +95,4 @@ resources:
memory: "512Mi"
cpu: "500m"
```
通过 Cgroups 的资源边界控制你可以从根本上切断一条导致整个系统雪崩的脆弱链路这也进一步使得 Docker 以及容器技术成为了现代高可用服务的基础设施首选

View File

@@ -33,7 +33,6 @@ dockerd \
--tlskey=server-key.pem \
-H=0.0.0.0:2376
```
3. 客户端想要连接时也必须出示客户端证书
> [!TIP]
@@ -62,23 +61,19 @@ Rootless 模式允许在完全局限于非 `root` 用户的环境中运行 Docke
```bash
$ sudo apt-get install uidmap
```
2. 切换到一个没有任何 `sudo` 权限的普通用户假设用户名为 `testuser`
```bash
$ su - testuser
```
3. 运行 Docker 官方提供的 Rootless 安装脚本
```bash
$ curl -fsSL https://get.docker.com/rootless | sh
```
4. 配置环境变量指向新创建的私有 socket
```bash
$ export DOCKER_HOST=unix:///run/user/1000/docker.sock
$ docker version
```
安装并暴露相应的配置后该用户的环境将能独立启动属于他自己的 Docker Daemon即使由于某些未知 0-Day 漏洞使得攻击者突破了容器他们也只会受限于 `testuser` 这个非特权用户所在的有限系统环境内
### 18.3.4 结语

View File

@@ -36,7 +36,6 @@ $ docker run -d \
--cap-add NET_BIND_SERVICE \
nginx:alpine
```
这里的 `--cap-drop ALL` 是实现特权最小化的最强杀手锏此时即便某黑客利用 0-Day 手段拿到了 Web 服务的容器 root Shell当他试图改变任何不属于他自己的进程配置或者所有权时系统都会报错拒绝访问
#### 实战场景二需要捕获网络数据包的网络实验
@@ -52,7 +51,6 @@ $ docker run -it --rm \
--cap-add NET_RAW \
tshark-image /bin/bash
```
我们只授予了所需的网络管理控制NET_ADMIN和侦听底层套接字的权限NET_RAW而免去了赋予整个容器终极杀器 `--privileged` 参数
> [!WARNING]

View File

@@ -26,7 +26,6 @@ Docker 默认启用了 Seccomp 并利用预置的 [默认配置文件](https://g
]
}
```
在启动时告诉 Docker 载入这套过滤配置
```bash
@@ -54,7 +53,6 @@ $ docker run --rm -it \
--security-opt apparmor=custom-nginx-profile \
nginx
```
### 18.5.3 容器镜像漏洞静态扫描
现代防护的防御已经不仅仅在运行阶段而向延伸至了构建与分发时期控制很多安全隐患并不是用户代码中的直接逻辑异常而是打包环境或者引入库的基础 `APT` 安装层面潜伏了开源界众所周知的历史漏洞
@@ -64,7 +62,6 @@ $ docker run --rm -it \
[Trivy](https://github.com/aquasecurity/trivy) 是由 Aqua Security 发行的一款针对容器技术的快速镜像漏洞扫描利器。在分发应用前通过它的扫描可以规避绝大多数风险。
```bash
## 如果使用本地命令行扫描容器镜像
$ trivy image alpine:3.10
@@ -81,7 +78,6 @@ Total: 2 (UNKNOWN: 0, LOW: 0, MEDIUM: 1, HIGH: 1, CRITICAL: 0)
| busybox | CVE-2022-28391 | HIGH | 1.30.1-r3 | 1.30.1-r4 | busybox: out-of-bounds read in... |
...
```
只要确保所有上传给私有或公共仓库分发服务的产物先被引入至 CI/CD 流水线如果出现 `HIGH` `CRITICAL` 严重的报错记录强行阻拦部署这本身便是构建环节极其有力的自动化安全大门保障 Trivy 最新的 Docker 版本也已内置支持官方扫描利刃 **Docker Scout**
### 18.5.4 容器核心层基石结语

View File

@@ -18,7 +18,6 @@ Trivy 是由 Aqua Security 开发的开源漏洞扫描器,以其轻量级、
**安装与基本使用**
```bash
# 安装 Trivy
curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin
@@ -34,17 +33,14 @@ trivy fs /path/to/project
# 扫描 Git 仓库
trivy repo https://github.com/aquasecurity/trivy
```
** CI/CD 中集成**
```bash
# 设置严重程度过滤
trivy image --severity HIGH,CRITICAL \
--exit-code 1 \
myregistry.com/myapp:v1.0.0
```
#### Grype - 支持多种软件包的扫描器
Grype Anchore 开发支持更广泛的软件包管理器和语言
@@ -58,7 +54,6 @@ Grype 由 Anchore 开发,支持更广泛的软件包管理器和语言。
**安装与使用**
```bash
# 安装 Grype
curl -sSfL https://raw.githubusercontent.com/anchore/grype/main/install.sh | sh -s -- -b /usr/local/bin
@@ -72,7 +67,6 @@ grype sbom:sbom.json
# 扫描特定目录
grype dir:/path/to/app
```
#### Snyk - 完整的安全平台
Snyk 提供了商业级的安全扫描服务特别适合企业环境
@@ -86,7 +80,6 @@ Snyk 提供了商业级的安全扫描服务,特别适合企业环境。
**基本使用**
```bash
# 安装 Snyk CLI
npm install -g snyk
@@ -99,7 +92,6 @@ snyk container test docker-archive://image.tar
# 监控仓库
snyk monitor --docker
```
**工具对比表**
| 特性 | Trivy | Grype | Snyk |
@@ -124,11 +116,9 @@ Syft 是 Anchore 推出的专业 SBOM 生成工具。
```bash
curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b /usr/local/bin
```
**生成 SBOM**
```bash
# 从镜像生成 SBOM多种格式
syft docker:nginx:latest -o json > sbom.json
syft docker:nginx:latest -o spdx > sbom.spdx
@@ -140,7 +130,6 @@ syft dir:/path/to/app -o json > sbom.json
# 从 OCI 镜像档案生成
syft oci-archive:image.tar -o json > sbom.json
```
#### CycloneDX SPDX 格式
两种主流的 SBOM 格式
@@ -164,7 +153,6 @@ syft oci-archive:image.tar -o json > sbom.json
</components>
</bom>
```
**SPDX 格式示例**
```json
@@ -185,7 +173,6 @@ syft oci-archive:image.tar -o json > sbom.json
]
}
```
#### SBOM 的应用场景
**漏洞关联**
@@ -193,11 +180,9 @@ syft oci-archive:image.tar -o json > sbom.json
当新的 CVE 被发现时可快速查询受影响的应用
```bash
# 使用 Grype 针对 SBOM 进行漏洞扫描
grype sbom:sbom.json --add-cpes-if-none
```
**合规性报告**
SBOM 保存为构建产物用于审计和合规性检查
@@ -221,7 +206,6 @@ wget https://github.com/sigstore/cosign/releases/latest/download/cosign-linux-am
chmod +x cosign-linux-amd64
sudo mv cosign-linux-amd64 /usr/local/bin/cosign
```
**生成密钥对传统方式**
```bash
@@ -229,21 +213,17 @@ cosign generate-key-pair
# 生成 cosign.key 和 cosign.pub
```
**签名镜像**
```bash
# 使用私钥签名(推送到仓库前)
cosign sign --key cosign.key myregistry.com/myapp:v1.0.0
# 系统会提示输入私钥密码
```
**验证签名**
```bash
# 使用公钥验证
cosign verify --key cosign.pub myregistry.com/myapp:v1.0.0
@@ -258,11 +238,9 @@ cosign verify --key cosign.pub myregistry.com/myapp:v1.0.0
# "optional": {...}
# }
```
**Keyless 签名推荐用于 CI/CD**
```bash
# 在 GitHub Actions 等 CI 中无需存储密钥
cosign sign --yes myregistry.com/myapp:v1.0.0
@@ -271,7 +249,6 @@ cosign verify myregistry.com/myapp:v1.0.0 \
--certificate-identity https://github.com/myorg/myrepo/.github/workflows/build.yml@refs/heads/main \
--certificate-oidc-issuer https://token.actions.githubusercontent.com
```
#### Docker Content Trust Notary
Docker Content Trust 使用 Notary 实现镜像签名 Docker 官方的签名解决方案
@@ -279,7 +256,6 @@ Docker Content Trust 使用 Notary 实现镜像签名,是 Docker 官方的签
**启用 DCT**
```bash
# 在环境中启用 DCT
export DOCKER_CONTENT_TRUST=1
@@ -291,24 +267,20 @@ docker push myregistry.com/myapp:v1.0.0
# 禁用 DCT仅用于特定操作
docker push --disable-content-trust myregistry.com/myapp:v1.0.0
```
**签名密钥管理**
```bash
# 首次推送时会提示创建 Delegation Key
# 密钥存储在 ~/.docker/trust/private/root_keys/ 和 ~/.docker/trust/private/tuf_keys/
# 查看签名信息
docker inspect --format='{{.RepoDigests}}' myregistry.com/myapp:v1.0.0
```
### 18.6.4 供应链安全最佳实践
#### 1. 基础镜像安全
```dockerfile
# ❌ 不推荐:使用 latest 标签
FROM ubuntu:latest
RUN apt-get update && apt-get install -y curl
@@ -317,7 +289,6 @@ RUN apt-get update && apt-get install -y curl
FROM ubuntu:22.04@sha256:a6d2b38300ce017add71440577d5b0a90460d0e6e0e14...(完整 64 位哈希)
RUN apt-get update && apt-get install -y curl=7.68.0-1ubuntu1
```
#### 2. 构建时扫描
Dockerfile 中集成安全扫描
@@ -337,11 +308,9 @@ RUN go build -o app .
FROM alpine:3.17@sha256:abcd1234...(请替换为实际完整的 64 位摘要哈希)
COPY --from=builder /app/app /app
```
#### 3. 运行时镜像扫描策略
```bash
# 镜像构建完成后立即扫描
trivy image --severity HIGH,CRITICAL \
--exit-code 1 \
@@ -351,13 +320,11 @@ trivy image --severity HIGH,CRITICAL \
# 定期扫描已部署的镜像
trivy image --scanners vuln,misconfig registry:5000/myapp:latest
```
#### 4. 镜像仓库安全配置
**Harbor私有镜像仓库的安全扫描**
```yaml
# harbor.yml 配置示例
trivy:
enabled: true
@@ -368,7 +335,6 @@ trivy:
scan_on_push: true # 推送时自动扫描
scan_all: true # 扫描仓库中的所有镜像
```
#### 5. 政策执行
Kubernetes 环境中使用 Admission Webhook 强制镜像签名和扫描
@@ -393,7 +359,6 @@ webhooks:
admissionReviewVersions: ["v1"]
sideEffects: None
```
### 18.6.5 CI/CD 中集成安全扫描
#### GitHub Actions 工作流示例
@@ -480,7 +445,6 @@ jobs:
push: true
tags: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest
```
#### GitLab CI 工作流示例
```yaml
@@ -545,7 +509,6 @@ push:
only:
- main
```
### 18.6.6 常见问题与最佳实践
**Q: 扫描报告中有过时的 CVE如何处理**

View File

@@ -23,7 +23,6 @@ flowchart LR
Proc --> Mech
end
```
## 本章内容
本章涵盖 Docker 安全的多个层面从内核隔离机制到运行时防护和供应链安全