跳转至

Jenkins审查制度

在 Jenkins 中,In-process Script Approval 是一种安全机制,主要用于 防止未经审查的脚本执行。即使 Jenkinsfile 看起来没有涉及权限审批的地方,但可能还是触发了 Jenkins 的 脚本安全策略,需要管理员审批。这通常发生在以下几种情况下:


1. Groovy 脚本运行在 Sandbox 之外

Jenkins 使用 Groovy Sandbox 来运行 Pipeline 脚本,它会对部分代码进行限制。如果 Jenkinsfile 中的某些语法或方法 不在安全白名单内,就会触发安全机制,要求管理员审批。

例如:

  • 使用 任意方法调用(特别是自定义的库或插件方法)。
  • 调用不受信任的外部类或代码。

示例:

def result = sh(script: 'someCommand', returnStdout: true)

某些 sh 命令或特殊写法可能触发审批。


2. 动态代码执行

如果 Jenkinsfile 中有涉及 动态方法调用闭包、或者动态代码执行(如 evaluate()script 块等),Jenkins 会认为这些代码 潜在地绕过安全机制,因此必须经过审批。


3. 插件引入的非安全操作

可能使用了某些 Pipeline 插件,这些插件默认未被 Jenkins 认为是安全的,必须由管理员审批才能运行。


4. 非受信任方法调用

Jenkins 在执行脚本时会检查脚本中调用的方法,任何未被标记为安全的方法(即未在 Jenkins 的白名单内)都会触发审批。

例如:

new File('/etc/passwd').text

这种访问本地文件系统的操作会被禁止,除非管理员明确审批。


解决方法:

  • 管理员审批:Script Approval 页面 审批 Jenkinsfile 中的代码片段。
  • 使用安全白名单: 避免使用非白名单的方法和动态脚本执行。
  • 开启 Groovy Sandbox: 在 Jenkinsfile 设置中启用 Groovy Sandbox,让代码在受限环境中执行。
  • 代码审查: 确保 Jenkinsfile 中没有潜在的安全问题或高危操作。

为什么需要审批?

Jenkins 设计这个机制是为了防止恶意脚本被注入到流水线中,尤其是在多人协作或自动化构建环境下,未经审查的脚本可能会:

  • 绕过安全限制。
  • 访问服务器上的敏感数据或文件。
  • 执行破坏性操作。