mirror of
https://github.com/yeasy/docker_practice.git
synced 2026-08-10 08:27:25 +00:00
fix(content): refresh Docker and Kubernetes guidance
This commit is contained in:
@@ -56,7 +56,7 @@ Rootless 模式允许在完全局限于非 `root` 用户的环境中运行 Docke
|
||||
|
||||
#### 配置运行 Rootless Docker
|
||||
|
||||
要在非 root 环境中运行 Docker,只需要简单几步:
|
||||
要在非 root 环境中运行 Docker,需要先满足宿主机条件:安装 `newuidmap` / `newgidmap`,并在 `/etc/subuid` 与 `/etc/subgid` 中为该用户分配足够的 subordinate UID/GID。若系统级 Docker daemon 仍在运行,命令行也仍可能连到 rootful socket,因此应明确切换 Docker context 或 `DOCKER_HOST`。
|
||||
|
||||
1. 安装必要的依赖(通常是 `uidmap` 工具包以便系统支持 `newuidmap` 和 `newgidmap`):
|
||||
```bash
|
||||
@@ -80,6 +80,9 @@ $ docker version
|
||||
```
|
||||
安装并暴露相应的配置后,该用户的环境将能独立启动属于他自己的 Docker Daemon。即使由于某些未知 0-Day 漏洞使得攻击者突破了容器,他们也只会受限于 `testuser` 这个非特权用户所在的有限系统环境内。
|
||||
|
||||
> [!NOTE]
|
||||
> Rootless 模式不是无条件替代 rootful Docker。端口绑定、网络、cgroup、存储驱动和系统服务自启动能力都受发行版、内核与 systemd 用户服务配置影响;生产环境应先验证具体工作负载,并用 `loginctl enable-linger <user>` 等方式显式配置开机自启动。
|
||||
|
||||
### 18.3.4 授权插件(Authorization Plugin)与访问策略
|
||||
|
||||
在企业环境中,对 Docker 守护进程的访问控制往往不仅限于文件系统权限,还需要更细粒度的授权策略。**Authorization Plugin** 机制允许在 API 层级对请求进行拦截和审批。
|
||||
@@ -110,4 +113,4 @@ $ docker version
|
||||
|
||||
### 18.3.5 结语
|
||||
|
||||
保障 Docker 服务端的安全主要是做减法:关闭不必要的网络监听点,严管 Socket 访问权限。而一旦基础系统条件允许,**毫不犹豫地在生产环境启用 Rootless 模式** 将是一项划算的安全加固选择。
|
||||
保障 Docker 服务端的安全主要是做减法:关闭不必要的网络监听点,严管 Socket 访问权限。在基础系统、网络和存储约束都验证通过后,Rootless 模式是一项值得优先评估的安全加固选择。
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
一个普通的 Linux 内核提供了 300 多个系统调用,而一个正常运行的容器化应用(例如 Nginx 服务)通常只会用到几十个调用,这就给攻击者留下了大量的闲置入口点来进行内核层的缓冲区溢出攻击。
|
||||
|
||||
Docker 默认启用了 Seccomp 并利用预置的 [默认配置文件](https://github.com/moby/moby/blob/master/profiles/seccomp/default.json) 将可以利用的系统调用缩减到了不足一半(默认禁用了 44 个危险的系统调用,比如修改时区或重启系统)。
|
||||
Docker 默认启用了 Seccomp,并使用预置的 [默认配置文件](https://docs.docker.com/engine/security/seccomp/) 作为 allowlist:默认拒绝未显式允许的系统调用,并额外允许常见应用所需的调用。Docker 官方文档将其描述为默认禁用约 44 个系统调用(内核与 Docker 版本不同会有差异),例如与内核模块、系统重启或特权命名空间操作相关的调用。
|
||||
|
||||
如果你对应用的系统调用特征了如指掌,你可以为容器定制专属规则。
|
||||
|
||||
@@ -44,8 +44,8 @@ chmod: /etc/passwd: Operation not permitted
|
||||
|
||||
在开启了上述机制的机器上:
|
||||
|
||||
- **AppArmor**: Docker 为所有启动的应用加载了一个默认的 `docker-default` 模板文件,如果你的某些异常写行为(比如往特殊的内核心脏目录写入配置)不在 AppArmor 许可列表之上,即使拥有物理 Root,写入同样失败。
|
||||
- **SELinux**: 所有的 Docker 操作强制附加特殊上下文标识标签。就算把主机的 `/` 绑定给了黑客的某服务,黑客对不属于 Docker 可见的标签的文件进行读写尝试亦会被阻止。
|
||||
- **AppArmor**: 在启用 AppArmor 的系统上,Docker 默认为容器加载 `docker-default` profile;如果需要自定义策略,先用 `apparmor_parser` 加载 profile,再通过 `--security-opt apparmor=<profile>` 指定。
|
||||
- **SELinux**: 在启用 SELinux 集成的系统上,容器与挂载目录需要正确的 SELinux label。绑定挂载时常用 `:z` 表示多个容器共享,`:Z` 表示该挂载只给单个容器使用;不要对 `/home`、`/usr` 等系统目录随意使用 `:Z`,否则可能破坏宿主机标签。
|
||||
|
||||
如果想为某些受信任应用施加特定的外部强化文件策略,可以通过如下方法指派规则表:
|
||||
|
||||
@@ -53,6 +53,10 @@ chmod: /etc/passwd: Operation not permitted
|
||||
$ docker run --rm -it \
|
||||
--security-opt apparmor=custom-nginx-profile \
|
||||
nginx
|
||||
|
||||
$ docker run --rm -it \
|
||||
-v "$PWD/html":/usr/share/nginx/html:Z \
|
||||
nginx
|
||||
```
|
||||
|
||||
### 18.5.3 容器镜像漏洞静态扫描
|
||||
|
||||
Reference in New Issue
Block a user