先理解
刚接触这个知识点
补齐先备概念,读原理与反例,再用自己的话解释为什么。
从核心原理开始 →理解 → 实现 → 排错 → 取舍
考察文件、网络、进程、凭证和资源限制。
知识内容核对 2026-10-03 · 原题来源核对 2026-10-02
建议先理解:
工具调用的结构、授权与业务契约 →批准对象与执行时授权 →按当前基础选择起点,也可以依次深入。遇到不熟悉的概念,先回到核心原理;完成后用知识练习检查理解。
LEARN · PRACTICE · REFLECT
先沿着原理、问答和迁移案例阅读。需要检查理解时,再切换巩固练习或展开个人记录。
核心知识 · 代码执行的资源与能力隔离
先备概念:进程权限、文件路径解析、容器资源限制
代码执行风险取决于进程实际拥有的能力。限制必须由执行环境强制覆盖文件、网络、凭证、进程树和资源,提示中的约定不能代替隔离。
程序从某个目录启动,仍可能读取绝对路径、跟随符号链接、启动后台进程和访问网络。隔离要明确可见文件、有效身份、可用系统调用与出站目标;不挂载宿主秘密,不让运行凭证超出任务所需。
容器共享宿主内核,默认资源限制可能未设置;挂入 Docker daemon socket 会引入控制宿主容器的能力。高风险不可信代码需按威胁模型评估更强隔离,不能因为容器退出码为零就宣称安全。限制 CPU、内存和时间还要覆盖子进程及磁盘增长。
退出后停止整个任务执行域,再从允许路径提取产物,拒绝符号链接、特殊文件与超大文件,检查导出类型及内容。路径预检查与打开之间存在竞态,Linux 可按实际环境评估 openat2 等受限解析;这是平台机制,不是跨平台万能方案。本单元未运行新的沙箱攻击实验。
沙箱要同时限制文件系统、网络出站、进程权限、系统调用、CPU、内存、磁盘和执行时间,并让每个任务使用独立身份与工作区。凭证只按步骤短期注入,避免挂载宿主敏感目录。执行完成后只导出经检查的产物,保留脱敏审计。容器是隔离手段之一,不能仅凭“在 Docker 里”就认定安全。
代码可能读密钥、访问内部服务、占满磁盘或启动后台进程。按任务分配独立工作区和最低权限身份,禁止宿主危险挂载与管理套接字。只读依赖与可写输出目录分开,路径规范化和真实路径检查防止符号链接越界;压缩包解压也要检查路径与大小。
默认按任务需求开放有限出站目标,检查重定向、域名解析变化和内网目标访问。需要调用业务服务时使用受限工具网关,不把高权限密钥暴露给任意执行代码。短期凭证限定受众、范围和有效期,日志与错误输出做脱敏。隐藏环境变量名称本身不是安全隔离。
设置 CPU、内存、进程数、磁盘、输出大小和绝对截止时间。超时要终止任务进程树并回收资源,不能只停止读取 stdout。依赖安装限定来源与版本,禁止未经审查的安装脚本获得宿主权限。并发任务之间不共享可写目录,避免一项任务读取另一项任务产物。
只将允许目录中的文件作为候选产物,核验格式、大小与内容策略,再交给用户。测试读取父目录、访问内部地址、输出超大日志和超时残留进程等边界,用无害测试对象验证。对高风险执行可选择更强隔离机制;需要根据威胁模型评估,而非在面试里把所有环境一概称为安全容器。
沿着问题的前提和约束继续向下读。先理解参考解答,再尝试收起答案,用自己的话解释因果和取舍。
第 1 层挂载 Docker socket 有什么风险?
容器边界会被控制 socket 扩大,需要具体说明能力。
控制 daemon 的能力可能启动高权限容器、挂载宿主文件并改变宿主环境,风险远大于普通代码文件访问。不要把 socket 提供给不可信任务;需要构建能力时使用隔离构建服务和最小权限接口。rootless 能降低部分风险,不能自动证明共享 socket 安全。
第 1 层代码开后台子进程后主进程退出怎么办?
执行寿命限制需覆盖整个进程树。
主进程结束不代表任务域结束。监督器应按容器或受控进程组管理整棵树,执行总时间和资源限制,清理完成后再导出产物。对子进程脱离会话、网络连接和写入残留做验证;只对父 PID 发终止信号可能漏掉后台工作。
第 1 层只限制文件路径能阻止符号链接越界吗?
文件访问限制必须考虑路径解析和竞态。
不够。字符串路径在允许目录内,链接解析后仍可能指向外部;检查后换链接还造成竞态。用隔离挂载、描述符相对打开和适当的禁止链接/越界解析机制,导出时验证真实文件类型;不要只靠 startsWith 目录前缀。
沿着这个回答继续深入
第 2 层先 realpath 检查,再按原路径打开,竞态还存在吗?
父问说明链接越界,子问检验常见补丁是否关闭检查使用窗口。
存在。攻击程序可在检查与打开之间替换目录或链接。让路径约束在同一次受控打开中生效,使用安全的描述符相对解析,或在任务停止且挂载只读后从受控快照导出;仍需验证平台行为与文件类型。
沿着这个回答继续深入
第 3 层安全打开了文件,复制时内容还可能变化吗?
父问保证路径解析,继续追问文件内容本身的可变性。
可能。如果写进程仍运行,已打开的普通文件也会被改写。先停止整个任务域或使用一致快照,再检查大小、类型与摘要并导出同一份内容;验证通过后继续从可变路径读取会重新引入窗口。
先找出改变的条件,再判断原方案中哪些前提仍成立。下面的案例是教学推演,便于将原理迁移到新问题。
改变的条件:原无网络沙箱需要少量受控出站。
延伸问题:是否直接放开全部网络?
不应。通过依赖镜像或代理限制目标、协议与包版本,禁止访问内部元数据和敏感网络,构建凭证按短期最小范围注入。下载缓存和产物仍不可信,需记录来源与校验;可达目标是能力扩展,需要重新评估。
保持不变的原理:新增能力必须有明确范围与独立强制边界。
改变的条件:没有数据窃取意图,却持续 fork 或写大文件。
延伸问题:文件与网络隔离够吗?
不够。对进程数、CPU、内存、磁盘和总执行时间设独立限制,保证回收覆盖所有子进程;资源用尽应返回受控失败并保留有限日志。安全包括保护其他任务可用性,不能只检查秘密是否泄露。
保持不变的原理:执行环境限制实际能力和资源,覆盖所有任务进程。
依据公开技术资料设计;参考资料支持技术机制,场景与评分标准为本站设计,不代表某公司面试原题。 新增问答与迁移案例用于原理讲解,来源核查与案例运行验证分别记录。
读完后可以对照这些标准解释原理、边界和取舍。掌握程度由你自评;需要进一步验证时,再完成下方小任务。
为只需读 CSV 和生成图表的任务写最小权限清单与终止流程。