FreeBSD 中文社区 2025 第二季度问卷调查
FreeBSD 中文社区(CFC)
VitePress 镜像站QQ 群 787969044视频教程Ⅰ视频教程Ⅱ
  • FreeBSD 从入门到追忆
  • 中文期刊
  • 状态报告
  • 发行说明
  • 手册
  • 网络文章集锦
  • 笔记本支持报告
  • Port 开发者手册
  • 架构手册
  • 开发者手册
  • 中文 man 手册
  • 文章
  • 书籍
  • FreeBSD Port 开发者手册翻译项目
  • 编辑日志
  • 译者说明
  • FreeBSD Port 开发者手册
    • FreeBSD Port 开发者手册
  • 第1章 简介
    • 1.1.简介
  • 第2章 制作新的 port
    • 2.1.制作新的 port
  • 第3章 简单的 port
    • 3.1.编写 Makefile
    • 3.2.编写描述文件
    • 3.3.创建校验和文件
    • 3.4.测试 port
    • 3.5.用 portlint 来检查 port
    • 3.6.提交新的 port
  • 第4章 复杂的 Port
    • 4.1 Port 工作原理
    • 4.2.获取源代码
    • 4.3.修改 port
    • 4.4.打补丁
    • 4.5.配置
    • 4.6.处理用户输入
  • 第5章 配置 Makefile
    • 5.1.原始来源
    • 5.2.命名
    • 5.3.归类
    • 5.4.源代码包文件
    • 5.5.维护者(MAINTAINER)
    • 5.6.一句话说明(COMMENT)
    • 5.7.项目网站
    • 5.8.许可证
    • 5.9.PORTSCOUT
    • 5.10.依赖
    • 5.11.从属 port 和 MASTERDIR
    • 5.12.man 手册
    • 5.13.info 文件
    • 5.14.Makefile 参数
    • 5.15.特殊的工作目录
    • 5.16.解决冲突
    • 5.17.安装文件
    • 5.18. 使用 BINARY_ALIAS 来重命名命令,而不是在编译中打补丁
  • 第6章 特殊情况
    • 第6章 特殊情况
  • 第7章 Flavors
    • 7.1.Flavors 简介
    • 7.2.使用 FLAVORS
    • 7.3.USES=php 和 Flavors
    • 7.4.USES=python 和 Flavors
    • 7.5.USES=lua 和 Flavors
  • 第8章 高级 pkg-plist 实践
    • 8.1.根据 make 变量对 pkg-plist 进行修改
    • 8.2.空目录
    • 8.3.配置文件
    • 8.4.动态与静态软件包列表
    • 8.5.自动创建软件包列表
    • 8.6.用关键词扩展软件包列表
  • 第9章 pkg-*
    • 9.1.pkg-message(安装二进制包时显示的消息文件)
    • 9.2.pkg-install、pkg-pre-install 和 pkg-post-install(安装二进制包时执行的脚本文件)
    • 9.3.pkg-deinstall、pkg-pre-deinstall 和 pkg-post-deinstall(卸载时执行的脚本文件)
    • 9.4.修改 pkg-* 文件的名字
    • 9.5.使用 SUB_FILES 和 SUB_LIST
  • 第10章 测试 port
    • 10.1.运行 make describe
    • 10.2.运行 make test
    • 10.3.Portclippy / Portfmt
    • 10.4.Portlint
    • 10.5.Port 工具
    • 10.6.PREFIX 和 DESTDIR
    • 10.7.Poudriere
    • 10.8.调试 port
  • 第11章 升级 port
    • 11.1.使用 Git 制作补丁
    • 11.2.UPDATING 和 MOVED
  • 第12章 安全
    • 12.1.安全为何如此重要
    • 12.2.修复安全漏洞
    • 12.3.向社区通报情况
  • 第13章 该做什么和不该做什么
    • 第13章 该做什么和不该做什么
  • 第14章 一个简单的 port
    • 第14章 一个简单的 port
  • 第15章 在 Port Makefile 中变量的顺序
    • 第15章 在 Port Makefile 中变量的顺序
  • 第16章 保持更新
    • 第16章 保持更新
  • 第17章 使用 USES 宏
    • 第17章 使用 USES 宏
  • 第18章 __FreeBSD_version 的值
    • 第18章 __FreeBSD_version 的值
由 GitBook 提供支持
LogoLogo

FreeBSD 中文社区(CFC) 2025

在本页
  • 12.3.1. VuXML 数据库
  • 12.3.2. VuXML 简介
  • 12.3.3. 测试对 VuXML 数据库的更改
在GitHub上编辑
导出为 PDF
  1. 第12章 安全

12.3.向社区通报情况

12.3.1. VuXML 数据库

发现安全漏洞后,尽快通知port用户社区是非常重要和紧急的步骤。这样的通知有两个目的。首先,如果危险确实很严重,立即采取应急措施是明智的。例如,停止受影响的网络服务,甚至完全卸载port,直到漏洞得到修复。其次,许多用户只偶尔升级安装的软件包。他们会从通知中得知,一旦修正版本可用,必须立即更新软件包。

鉴于树中ports的数量庞大,每次事件都发布安全通告会造成信息泛滥,当涉及真正严重的事项时,会失去受众的注意。因此,在 FreeBSD VuXML 数据库中记录ports中发现的安全漏洞。安全官员团队成员也监视这些需要他们干预的问题。

提交者可以自行更新 VuXML 数据库,协助安全官员团队,并更快地向社区传递关键信息。那些不是提交者或发现了异常严重漏洞的人不应该犹豫,应该直接联系安全官员团队,如 FreeBSD 安全信息页面所述。

VuXML 数据库是一个 XML 文档。其源文件 vuln.xml 位于port security/vuxml 中。因此,文件的完整路径名将是 PORTSDIR/security/vuxml/vuln.xml。每当在port中发现安全漏洞时,请在该文件中添加一个条目。在熟悉 VuXML 之前,最好的做法是找到一个适合当前情况的现有条目,然后复制并将其用作模板。

12.3.2. VuXML 简介

完整的 XML 格式很复杂,远远超出了本书的范围。然而,为了对 VuXML 条目的结构有基本了解,只需要了解标签的概念。XML 标签名被尖括号括起来。每个开放标签必须有一个匹配的闭合标签。标签可以嵌套。如果嵌套,内部标签必须在外部标签之前关闭。标签有一个层次结构,即更复杂的嵌套规则。这类似于 HTML。主要区别在于 XML 是可扩展的,即基于定义自定义标签。由于其固有结构,XML 将其他无定形的数据整理成形。VuXML 特别适用于标记安全漏洞描述。

现在考虑一个现实的 VuXML 条目:

<vuln vid="f4bc80f4-da62-11d8-90ea-0004ac98a7b9"> 
  <topic>Several vulnerabilities found in Foo</topic> 
  <affects>
    <package>
      <name>foo</name> 
      <name>foo-devel</name>
      <name>ja-foo</name>
      <range><ge>1.6</ge><lt>1.9</lt></range> 
      <range><ge>2.*</ge><lt>2.4_1</lt></range>
      <range><eq>3.0b1</eq></range>
    </package>
    <package>
      <name>openfoo</name> 
      <range><lt>1.10_7</lt></range> 
      <range><ge>1.2,1</ge><lt>1.3_1,1</lt></range>
    </package>
  </affects>
  <description>
    <body xmlns="http://www.w3.org/1999/xhtml">
      <p>J. Random Hacker reports:</p> 
      <blockquote
        cite="http://j.r.hacker.com/advisories/1">
        <p>Several issues in the Foo software may be exploited
          via carefully crafted QUUX requests.  These requests will
          permit the injection of Bar code, mumble theft, and the
          readability of the Foo administrator account.</p>
      </blockquote>
    </body>
  </description>
  <references> 
    <freebsdsa>SA-10:75.foo</freebsdsa> 
    <freebsdpr>ports/987654</freebsdpr> 
    <cvename>CVE-2023-48795</cvename> 
    <certvu>740169</certvu> 
    <uscertta>SA10-99A</uscertta> 
    <mlist msgid="201075606@hacker.com">http://marc.theaimsgroup.com/?l=bugtraq&amp;m=203886607825605</mlist> 
    <url>http://j.r.hacker.com/advisories/1</url> 
  </references>
  <dates>
    <discovery>2010-05-25</discovery> 
    <entry>2010-07-13</entry> 
    <modified>2010-09-17</modified> 
  </dates>
</vuln>

标记名称应该是不言自明的,因此我们只会更仔细地查看需要填写的字段:

这是 VuXML 条目的顶层标记。它有一个必需属性, vid ,为该条目指定一个通用唯一标识符(UUID)(用引号括起来)。为每个新的 VuXML 条目生成一个 UUID(不要忘记用 uuidgen(1)生成 VuXML UUID 并将其替换为模板 UUID)。

这是发现的问题的一行描述。

受影响的软件包名称列在那里。可以给出多个名称,因为几个软件包可能基于单个主 port 或软件产品。这可能包括稳定和开发分支,本地化版本和包含不同重要构建时间配置选项选择的从属 ports。

软件包的受影响版本在那里指定为使用 , , , 和 元素的一个或多个范围的组合。检查给定的版本范围是否不重叠。 在范围规范中, * (星号)表示最小版本号。特别地, 2.* 小于 2.a 。因此,星号可用于匹配所有可能的 alpha 、 beta 和 RC 版本。例如, 2.3. 将选择性地匹配每个 2.x 版本,而 2.03.0 不会,因为后者缺少 2.r3 并匹配 3.b 。 上述示例指定受影响的版本为 1.6 及 1.9 之前的版本, 2.x 在 2.4_1 之前的版本,以及版本 3.0b1 。

几个相关的软件包组(基本上,ports)可以在 部分中列出。如果几个软件产品(比如 FooBar、FreeBar 和 OpenBar)是从同一代码库发展而来,并且仍然共享其错误和漏洞,则可以使用此功能。请注意,这与在单个 部分中列出多个名称的区别。

版本范围必须允许 PORTEPOCH 和 PORTREVISION (如果适用)。请记住,根据排序规则,具有非零 PORTEPOCH 的版本大于任何不含 PORTEPOCH 的版本,例如, 3.0,1 大于 3.1 ,甚至大于 8.9 。

这是问题摘要。XHTML 用于此字段。至少必须出现

和

。可以使用更复杂的标记,但仅用于准确性和清晰度:请勿添加花哨的内容。

此部分包含对相关文档的引用。鼓励提供尽可能多的参考文献。

这是一个 FreeBSD 安全公告。

这是一个 FreeBSD 问题报告。

这是一个 MITRE CVE 标识符。

这是一个 US-CERT 漏洞通告。

这是一个 US-CERT 技术网络安全警报。

这是一个存档在邮件列表中的帖子的网址。属性 msgid 是可选的,可以指定帖子的消息 ID。

这是一个通用的网址。只有当其他参考类别都不适用时才使用。

这是问题披露的日期(YYYY-MM-DD)。

这是条目添加的日期(YYYY-MM-DD)。

这是条目中的任何信息上次修改的日期(YYYY-MM-DD)。新条目不得包括此字段。在编辑现有条目时添加它。

12.3.3. 测试对 VuXML 数据库的更改

此示例描述了软件包 dropbear 中的一个漏洞的新条目,该漏洞已在版本 dropbear-2013.59 中修复。

作为先决条件,安装一个新版本的安全/vuxml port。

首先,检查是否已经有关于这个漏洞的条目。如果有这样的条目,它将匹配先前版本的软件包, 2013.58 :

% pkg audit dropbear-2013.58

如果找不到任何条目,请为这个漏洞添加一个新条目。

% cd ${PORTSDIR}/security/vuxml
% make newentry

如果漏洞具有 MITRE CVE 标识符,则可以改用以下命令:

% cd ${PORTSDIR}/security/vuxml
% make newentry CVE_ID=CVE-YYYY-XXXXX

其中 CVE-YYYYY-XXXX 是有效的 CVE 标识符。

如果漏洞是 FreeBSD 安全公告,则可以改用以下命令:

% cd ${PORTSDIR}/security/vuxml
% make newentry SA_ID=FreeBSD-SA-YY-XXXXXX.asc

其中 FreeBSD-SA-YY-XXXXXX.asc 是一个已发布的 FreeBSD 安全公告。

验证其语法和格式:

% make validate

前一个命令会生成 vuln-flat.xml 文件。也可以使用以下命令生成:

% make vuln-flat.xml

验证该条目的 部分是否匹配正确的软件包:

% pkg audit -f ${PORTSDIR}/security/vuxml/vuln-flat.xml dropbear-2013.58

确保该条目在输出中不产生错误匹配。

现在检查是否匹配正确的软件包版本:

% pkg audit -f ${PORTSDIR}/security/vuxml/vuln-flat.xml dropbear-2013.58 dropbear-2013.59
dropbear-2012.58 is vulnerable:
dropbear -- exposure of sensitive information, DoS
CVE: CVE-2013-4434
CVE: CVE-2013-4421
WWW: https://portaudit.FreeBSD.org/8c9b48d1-3715-11e3-a624-00262d8b701d.html

1 problem(s) in the installed packages found.

前者版本匹配,而后者版本不匹配。

上一页12.2.修复安全漏洞下一页第13章 该做什么和不该做什么

最后更新于10个月前