seccomp 起什么作用
seccomp 按允许清单限制容器可调用的系统调用。容器运行时默认已启用一套内置配置,挡下部分高风险调用;需要时可以按业务定制配置,或在受控调试场景下临时关闭。排查出现「操作不被允许」而日志又没有更多线索的问题时,先确认是否被这一层拦截。
基本信息
| 默认状态 | 内置允许清单自动启用 |
|---|---|
| 自定义方式 | 通过安全选项指定配置文件 |
| 关闭方式 | 使用不受限取值(有风险) |
| 检查方式 | 读取环境信息里的安全选项 |
| 建议做法 | 从默认配置出发逐条放行 |
典型使用场景
- 加固基线中确认系统调用拦截处于启用状态
- 为特殊业务定制允许清单
- 排查操作被拒绝且日志没有线索的问题
- 排障期临时放开,之后尽快恢复默认
- 审计存量容器是否被关闭了拦截
查看与定制
查看与定制
docker info -f '{{json .SecurityOptions}}' # 查看启用的安全选项
docker run -d --security-opt seccomp=/etc/docker/seccomp/api.json --name api app/api:1.4.2
docker inspect -f '{{json .HostConfig.SecurityOpt}}' api # 核对容器的安全选项配置形态与含义
| 项目 | 说明 | 注意 |
|---|---|---|
| 默认配置 | 内置的允许清单 | 默认已启用 |
| 自定义配置 | 按业务裁剪 | 从默认配置逐条放行更稳 |
| 不受限取值 | 关闭拦截 | 仅限受控调试场景 |
| 核对方式 | 检查容器的安全选项字段 | 确认配置是否真的生效 |
自定义配置建议从默认配置出发逐条放行,比自行编写更稳妥;放行项要与运行时的调用需求核对,例如即时编译场景。
出现操作被拒绝且日志没有更多线索时,先确认是否被系统调用过滤拦截,再决定具体放行哪一项。
使用建议
- 新服务默认沿用内置配置,不做额外放宽
- 需要定制时先复现问题,明确缺失的是哪一类调用
- 放行项逐条增加并复测,避免一次放开过宽
- 定期审计是否有容器被关闭了该层防护并恢复