权限模型约束
🌐 Permission Model constraints
在使用此系统之前,你需要了解一些限制条件:
🌐 There are constraints you need to know before using this system:
- 模型不会继承到工作线程。默认的
worker_threads.Worker(没有execArgv选项)仍然会接收父进程的 CLI 标志,包括如果传给父进程的--permission和--allow-*。显式设置execArgv,包括execArgv: [],会替换继承的标志。然后工作线程不会保留父进程的权限模型授权,除非这些标志再次列在execArgv中。这个差异是故意的,并不是绕过规则。 - 使用权限模型时,以下功能将受限:
- 原生模块
- 网络
- 子进程
- 工作线程
- 检查器协议
- 文件系统访问
- WASI
- FFI
- OpenSSL STORE 加载器
- 权限模型是在 Node.js 环境设置完成后初始化的。然而,某些标志,如
--env-file或--openssl-config,设计用来在环境初始化之前读取文件。因此,这些标志不受权限模型规则的约束。通过v8.setFlagsFromString在运行时设置的 V8 标志也是如此。 - Node.js 本身在运算符标志选择的位置创建、写入或读取的文件,可能不会始终按照权限模型进行检查,尤其是当标志接受会扩展到多个路径的模板或模式时。例如,即使展开的路径不在
--allow-fs-write的覆盖范围内,--trace-event-file-pattern(${rotation})轮换的跟踪文件也可以被写入。因为位置是由运算符选择的,所以这样的漏洞通常被当作普通的 bug 处理,而不是安全漏洞。请通过常规问题跟踪器报告它们。 - 启用权限模型时,无法在运行时请求 OpenSSL 引擎,这会影响内置的 crypto、https 和 tls 模块。
- 当启用权限模型时,无法加载运行时可加载的扩展,这会影响 sqlite 模块。
- 通过
node:fs模块使用现有的文件描述符会绕过权限模型。