关于开源软件:杜绝开源依赖风险许可证扫描让高效合规两不误

5次阅读

共计 4238 个字符,预计需要花费 11 分钟才能阅读完成。

🌟 近日,在「DevSecOps 软件平安开发实际」课程上,极狐(GitLab) 业余服务交付经理居文峰、极狐(GitLab) 前端工程师万里欣,分享了许可证扫描的原理、配置及利用,并演示了极狐 GitLab 许可证扫描性能,帮忙大家平安应用开源软件。

以下内容整顿自本次直播,Enjoy~

利用开源软件曾经成为软件行业的重大趋势。开源软件为企业和开发者提供了微小便当,促成了翻新与合作。但如果漠视开源软件许可证及其权利义务与限度,很可能会面临法律纠纷、安全隐患以及昂扬的依赖治理老本。

开源许可证及其常见类型

开源软件许可证(Open Source Software License)是一种法律许可,是开源软件供应商用于 受权软件使用者应用、批改和公布其开源软件的协定。其目标是标准软件(受著作权爱护的软件)应用或者散发行为。

世界上有上百种开源许可证,目前支流的有 6 种:

  1. Apache:公布于 Apache 软件基金会。此许可证容许商业应用,不强制要求源代码凋谢,是目前应用最广的开源软件许可证之一。
  2. MIT:极其宽松的许可证,容许商业应用和私有化批改后的代码。MIT 许可证要求保留版权信息,但不强制开源批改后的代码。案例我的项目有 GitLab CE、Ruby、JQuery、Rails、Vue、React 等。
  3. GPL:GNU 通用公共许可协定(GNU General Public License),是自由软件基金会公布的许可证。GPL 要求应用软件的批改版本必须采纳同样的 GPL 协定公布,即 如果我的项目蕴含了 GPL 许可证的代码,那么整个我的项目都必须应用 GPL 许可证
  4. BSD:宽松的开源许可证,容许商业应用和批改私有化。与 MIT 许可证的次要区别是 不要求保留版权信息。案例我的项目有 Curl 等。
  5. LGPL:Lesser General Public License,是 GPL 的补充,区别在 LGPL 只要求批改的开源组件开源,而不要求整个衍生软件开源。
  6. MPL:Mozilla Public License,公布于 Mozilla 基金会。MPL 要求批改版本必须以 MPL 许可证开源公布,但能够用于商业利用

而许可证由其宽松水平,可分为:

  • Copyleft 许可证:使开源软件及其衍生版本的开源属性代代相传。它强制要求软件必须继续开源,以确保开发者与用户的权力失去最大范畴内的保障,实现开源精力的连续。
  • 宽松式许可证:也称为非 Copyleft 许可证,对软件再公布和衍生产品的许可证抉择要求更加宽松,容许软件商业应用与闭源,提供更大灵活性与选择性。

从上述概念能够看出,Apache、MIT、BSD 属于宽松式许可证(Permissive License),如下图左侧;GPL、LGPL、MPL 属于 Copyleft 许可证,如下图右侧。咱们须要 依据软件属性与商业模式抉择失当的许可证,在开源理念与商业需要间获得均衡

开源许可证扫描是软件研发过程中,不可或缺的工具

开源软件许可证如此之多,不同许可证之间存在较大差别,许可证谬误应用的事件时有发生,可能给企业带来法律、经营、平安与洽购等畛域的重大危险与损失。

依据 Synopsys 公布的《2023 年开源平安与危险剖析报告》显示:54% 的代码库存在许可证抵触;31% 的代码库蕴含没有许可证或应用定制许可证的开源代码。

开源软件应用危险突出,开源许可证扫描成为企业推动开源治理与危险管制的重要伎俩之一

许可证扫描(License Scanning)是指对软件、代码库或零碎进行 许可证抵触查看 的过程。它通过主动扫描软件的依赖与组件,检测其许可证之间是否存在不兼容或抵触的问题。

开源许可证扫描作为帮忙企业平安采纳开源关键技术,其重要性与必要性是不言而喻的。因而越来越多的软件企业关注并施行开源许可证扫描,常见形式有:

  • 集成第三方扫描工具。在代码 Push、Build 等时触发扫描。这须要购买第三方工具许可与保护老本,集成过程比较复杂。
  • 定期人工扫描。开发团队定期剖析代码与依赖,手工辨认开源组件与许可证,更新许可证清单。这种形式效率低下,无奈笼罩全副依赖,难以继续进行。
  • CI 流程集成。在继续集成流程中减少开源许可证扫描步骤,在每次构建时运行扫描工具,生成报告。这须要抉择与 CI/CD 工具兼容的扫描工具,也减少了配置与保护难度。
  • 减少治理流程。制订开源许可证治理流程,在组件引入、版本升级等环节进行审核,要求提供相应的许可证清单与合规性证实。其毛病是大量减少了开发与治理老本,施行难度也较大。

极狐 GitLab 开源许可证扫描的劣势与利用

相比上述形式,极狐 GitLab 的开源许可证扫描具备显著劣势:

  1. 原生集成。极狐 GitLab 内置开源许可证扫描性能,深度集成在极狐 GitLab CI/CD 流程中,无需集成第三方工具,即可应用,配置简略,无额定保护老本。
  2. 高度自动化。极狐 GitLab 会主动实时监测开源依赖变动,并触发扫描,每一次代码提交若产生新的许可证都有记录,可逆追踪。
  3. 简略易用。极狐 GitLab 扫描后果以扼要形式展现,并提供修复倡议,升高开源治理的应用门槛;并反对多种语言和包管理器,不便开发者参加。
  4. 灵便自定义。极狐 GitLab 反对自定义许可证与扫描规定,能够齐全匹配企业的开源治理要求。同时也提供丰盛的预置规定,笼罩支流开源许可证。
  5. 继续优化。极狐 GitLab 会持续裁减许可证库,加强扫描准确性,并联合用户反馈继续欠缺与优化扫描性能,确保我的项目合乎法规要求和企业政策、审计政策等。

图:极狐 GitLab 许可证扫描反对多种语言和包管理器

Step 1:启用及设置许可证策略

极狐 GitLab 许可证扫描的前提条件是:

  • 具备 Docker 或 Kubernetes 执行器的 Runner;
  • Docker Engine 版本高于 18.09.03。

在流水线中启用许可证扫描(将在下文中详解):

include:
  - template: License-Scanning.gitlab-ci.yml

MR 审核者十分关心:在 MR 合并审批申请过程当中,以后新源头分支引入了哪些新的许可证?

这个问题通过「License-Check」来查看。

在极狐 GitLab 15.9 之前版本,通过「我的项目 → 设置 → 合并申请 → 合并申请批准,启用 License – Check」启用查看,如下图:

具体放行和回绝哪些许可证,则在「平安与合规 → 许可证合规性」中设置策略,如下图。

极狐 GitLab 15.9 以及之后的版本,通过「我的项目 → 平安与合规 → 策略 → 新建策略 → 抉择 扫描后果策略」设置:

Step 2:主动创立策略文件寄存我的项目

极狐 GitLab 15.9 以及之后的版本,在创立策略后,会主动创立独自的我的项目寄存策略文件(YAML),如下图子目录是 Security policy project,用户能够通过代码形式间接去编写 YAML 文件,实现疾速扫描策略编写。

Step 3:查看许可证合规状况

与查看其余平安扫描一样,通过「平安与合规 → 许可证合规」,查看最新的合规状况:以后我的项目用了哪些开源组件,以及它所遵循的协定;还能够看到每个组件以后是回绝,还是遵循了策略等。

Step 4:查看 MR 审批后果

只有开启了许可证扫描,就能够看到 License – Check 信息。

如下图,在本次 MR 合并之前,在原分支扫描显示新引入许可证分类,如已回绝、已通过等提示信息来帮忙审核者来判断本次合并是否批准。

如下图,在流水线页面,也能够查看残缺许可证详细信息。

YAML、license-finder、报告文件解析

YAML

上文提到,利用两行代码即可启用许可证扫描:

include:
  - template: License-Scanning.gitlab-ci.yml

下图就是 YAML 文件的庐山真面目,蕴含了两个局部:

  • variables:定义变量,用于在 job 中援用;
  • license_scanning:定义许可证扫描 job。
变量

其中,极狐 GitLab 主动预约义了 3 个变量:

  1. SECURE_ANALYZERS_PREFIX:定义平安剖析工具的前缀,用于从极狐 GitLab Container Registry 中拉取正确的镜像;
  2. LICENSE_MANAGEMENT_SETUP_CMD:定义许可证扫描工具的装置命令;
  3. LICENSE_MANAGEMENT_VERSION:定义许可证扫描工具的版本。目前最新版本为“4”。

许可证扫描的罕用变量如下表。也能够拜访极狐 GitLab 文档核心查看。

license_scanning

license_scanning job 用于执行开源许可证扫描,调用极狐 GitLab 内置的 license-scanning 工具对仓库代码进行扫描,检测我的项目开源依赖与许可证信息。

如下图,license_scanning job 反对的次要字段如下:

  • image:定义扫描所应用的镜像;
  • variables:定义扫描所需的变量,比方报告存储门路与可见性等;
  • script:执行扫描命令;
  • artifacts: 定义扫描后果存档配置;
  • rules:定义扫描规定。

license-finder

license-finder 是一个帮忙扫描我的项目中所应用的开源软件许可证信息的工具。运行 license-finder 时,它会扫描我的项目中的依赖项,并尝试查找每个依赖项的许可证信息,详情查看极狐 GitLab 许可证查找器。

以极狐 GitLab 前端用 NPM 治理的我的项目为例:

  • 初始化:NPM install 装置相干依赖;
  • 扫描:

    • 自动检测到我的项目中的 package.json 文件;
    • 解析内容,找到 dependencies 以获取依赖项信息;
    • 递归查看每个依赖项及其子依赖项,获取它们的许可证信息。
  • 后果报告:收集扫描到的后果到报告里。

那么,license-finder 怎么查找许可证?

1. 包管理器的配置文件,如 package.json,能够用 license 字段申明以后库的许可证:

2. 依赖项的源代码中的许可证申明,如许可证文件或代码中的许可证正文:

报告文件

 在 license_scanning  job 里,指定保留 gl-license-scanning-report.json 文件。

用户能够在 pipeline 页面的“Artifacts”选项卡中下载该报告文件。下载的 json 文件如下所示,dependencies 具体列出所有检出的开源依赖,包含名称、版本、许可证类型等信息。

开源软件是软件企业继续依赖与使用的重要资源。开源许可证扫描必不可少,其广泛应用也将成为企业开源治理的标配与常态。

正文完
 0