FreeBSD 5.4 RELEASE amd64 发行公告(2005 年 5 月 9 日)
FreeBSD 项目
版权所有 © 2000, 2001, 2002, 2003, 2004, 2005 FreeBSD 文档项目
FreeBSD 是 FreeBSD 基金会的注册商标。
IBM、AIX、EtherJet、Netfinity、OS/2、PowerPC、PS/2、S/390 和 ThinkPad 是国际商业机器公司(International Business Machines Corporation)在美国及其他国家/地区的商标。
IEEE、POSIX 和 802 是美国电气与电子工程师协会(Institute of Electrical and Electronics Engineers, Inc.)在美国的注册商标。
Intel、Celeron、EtherExpress、i386、i486、Itanium、Pentium 和 Xeon 是英特尔公司(Intel Corporation)或其子公司在美国及其他国家/地区的商标或注册商标。
Sparc、Sparc64、SPARCEngine 和 UltraSPARC 是 SPARC International, Inc 在美国及其他国家/地区的商标。带有 SPARC 商标的产品基于 Sun Microsystems, Inc. 开发的架构。
许多制造商和销售商用于区分其产品的名称被主张为商标。在本文件中出现这些名称时,如果 FreeBSD 项目知道该商标的主张,就会在名称后附上“™”或“®”符号。
FreeBSD 5.4-RELEASE 的发行说明包含了自 5.3-RELEASE 以来对 FreeBSD 基本系统所做变更的摘要。本文件列出了自上次发行以来发布的适用安全公告,以及对 FreeBSD 内核和用户空间的重大变更。此外,还简要介绍了升级相关的说明。
1 简介
本文档包含 FreeBSD 5.4-RELEASE 在 AMD64 硬件平台上的发行说明,介绍了 FreeBSD 最近新增、变更或删除的功能,并提供了从 FreeBSD 以前版本升级的相关说明。
FreeBSD 5.4-RELEASE 的发行版可以在 ftp://ftp.FreeBSD.org/ 或其任何镜像站点上找到。关于获取此版本(或其他版本)FreeBSD 发行版的更多信息,请参阅 《获取 FreeBSD》附录 和 《FreeBSD 手册》。
建议所有用户在安装 FreeBSD 之前查看发行勘误表(勘误)。该勘误表包含在发行周期后期或发布后发现的“最新信息”。通常,它包括已知漏洞、安全公告以及文档更正的相关信息。FreeBSD 5.4-RELEASE 的最新勘误表可以在 FreeBSD 官方网站上找到。
2 新增功能
本节介绍了自 FreeBSD 5.3-RELEASE 以来新增或变更的主要功能。通常,这里提到的变更特定于 5-STABLE 分支,除非特别标注为 [已合并] 功能。
典型的发行说明项目包括 5.3-RELEASE 后发布的安全公告、新的驱动程序或硬件支持、新命令或选项、主要错误修复以及第三方软件更新。它们还可能列出主要 Port/软件包的变更或发布工程的改进。显然,发行说明不可能列出每个版本之间 FreeBSD 的所有变更;本文档主要关注安全公告、用户可见的变更以及主要的架构改进。
2.1 安全公告
修复了 fetch(1) 工具中的一个漏洞,该漏洞允许恶意 HTTP 服务器覆盖客户端内存中的任意部分。有关详细信息,请参阅安全公告 FreeBSD-SA-04:16.fetch。
修复了 procfs(5) 和 linprocfs(5) 中的一个漏洞,该漏洞可能允许恶意本地用户读取内核内存部分内容,或通过导致系统崩溃发起本地拒绝服务攻击。有关详细信息,请参阅安全公告 FreeBSD-SA-04:17.procfs。
修复了 TELNET 客户端程序中的两个缓冲区溢出漏洞,这些漏洞可能允许恶意的 TELNET 服务器或网络攻击者利用 telnet(1) 执行任意代码,权限与运行该程序的用户相同。更多信息请参阅安全公告 FreeBSD-SA-05:01.telnet。
修复了 sendfile(2) 系统调用中的信息泄露漏洞,该漏洞可能会传输内核内存的随机部分。有关更多信息,请参阅安全公告 FreeBSD-SA-05:02.sendfile。
修复了 FreeBSD/amd64 中的一个潜在权限提升漏洞,该漏洞允许非特权用户直接访问某些需要提升权限级别才能访问的硬件。更多详细信息请参阅安全公告 FreeBSD-SA-05:03.amd64。
修复了 SIOCGIFCONF ioctl(2) 中的信息泄露漏洞,该漏洞会泄露 12 字节的内核内存。更多信息请参阅安全公告 FreeBSD-SA-05:04.ifconf。
修复了 cvs(1) 中的多个编程错误,这些错误可能导致 CVS 服务器上执行任意代码。更多信息请参阅安全公告 FreeBSD-SA-05:05.cvs。
2.2 内核变更
jail(8) 功能现在支持一个新的 sysctl
参数 security.jail.chflags_allowed
,用于控制 chflags(1) 在 jail 中的行为。如果设置为 0
(默认值),jail 中的 root 用户将被视为无特权用户;如果设置为 1
,jail 中的 root 用户将与非 jail 环境中的 root 用户具有相同的权限。
debug.mpsafevm
引导加载器参数现在默认启用。
修复了 ULE 调度器中的若干漏洞。
2.2.1 引导加载器变更
2.2.2 硬件支持
新增灵活的处理器速度控制框架,为各种驱动程序提供调整处理器速度以控制 CPU 能耗的方法。更多详情请参阅 cpufreq(4) 手册页。
新增驱动程序 pcii 以支持 GPIB-PCIIA IEEE-488 卡。
2.2.2.1 多媒体支持
2.2.2.2 网络接口支持
新增了 cdce(4) USB 通信设备类以太网驱动程序。
驱动程序 cp(4) 现已 MPSAFE。
驱动程序 ctau(4) 现已 MPSAFE。
驱动程序 cx(4) 现已 MPSAFE。
在驱动程序 em(4) 中,默认禁用 VLAN 标记的硬件支持,因为该功能与混杂模式可能会发生冲突。
驱动程序 fxp(4) 默认禁用以太网流量控制,以避免系统崩溃或进入内核调试模式的问题。
驱动程序 hme(4) 现已 MPSAFE。
驱动程序 ndis(4) 包装器现在能在 amd64 系统上运行的 Windows®/x86-64 二进制文件。
修复了驱动程序 sk(4) 中的多个编程错误。这些漏洞特定于 SMP 系统,可能会导致崩溃、页面错误、中止的 SSH 连接或文件传输损坏。更多详情请参阅勘误表 FreeBSD-EN-05:02.sk。
驱动程序 sk(4) 现在支持 altq(4)。此外,该驱动程序现在支持基于 Yukon 接口的巨帧功能。
2.2.3 网络协议
在发送方写入必须进行分片的数据时,IPv6 中的 MTU 反馈已被禁用。
实现了通用地址冗余协议(CARP)。CARP 源自 OpenBSD,允许多个主机共享一个 IP 地址,从而提供高可用性和负载均衡。更多信息,请参阅 carp(4) 手册页。
ipfw(4) 系统可以与 debug.mpsafenet=1
一起工作(该调优项默认值为 1
),当使用 gid、jail 和/或 uid 规则选项时。
ipfw(8) ipfw 转发规则现在支持在指定内核选项 options IPFIREWALL_FORWARD_EXTENDED
以及 options IPFIREWALL_FORWARD
时,完全的包目标操作。此内核选项禁用所有限制,以确保本地生成的包能够正确操作,并允许重定向目标为本地配置 IP 地址的包。请注意,必须仔细设计 ipfw(8) 规则,确保像 PMTU 发现等功能不会出现问题。
ipnat(8) 现在允许重定向规则用于非 TCP/UDP 数据包。
正在进行的工作正在减少网络协议栈中使用 Giant 锁的情况,并改善锁定策略。
新增的 ng_netflow(4) NetGraph 节点允许运行 FreeBSD 的路由器进行 NetFlow 版本 5 导出。
sppp(4) 驱动程序现在包括 Frame Relay 支持。
修复了一个 TCP 错误,导致当接收窗口为零字节时,有时会忽略 RST 包。
修复了 TCP SACK 实现中的多个错误。
集成在 FreeBSD 中的 KAME IPv4 IPsec 实现现在支持 TCP-MD5。
随机的临时端口号分配在高连接率时导致了一些端口重用的问题。现在,在高连接率期间禁用此功能;当新连接的创建速度超过 net.inet.ip.portrange.randomcps
每秒时,将在接下来的 net.inet.ip.portrange.randomtime
秒内禁用端口号随机化。这两个 sysctl 变量的默认值分别为 10
和 45
。
2.2.4 磁盘与存储
驱动程序 amr(4) 现在可以安全地在使用 pae(4) 的系统上使用。
新增了支持 HighPoint RocketRAID 182x 系列的驱动程序 hptmv(4) 。
驱动程序 ips(4) 现在支持一些现代 ServeRAID 模型的内核崩溃转储。
已移除驱动程序 matcd(4) 。
新增了GEOM 类 SHSEC
。它支持在多个 GEOM 提供程序之间共享秘密。为了揭示秘密,所有这些提供程序必须同时存在。此功能由工具 gshsec(8) 控制。
有关新挂载的 cd9660 文件系统(例如 RockRidge 扩展的存在)的信息,现在仅在内核以详细模式启动时打印。此变更是为了减少(通常不必要的)内核日志消息。
2.2.5 文件系统
对于“脏”UFS 和 UFS2 文件系统,不再在挂载时重新计算汇总信息,而是通过后台 fsck(8) 来完成此操作。此变更提高了崩溃后挂载大型文件系统时的启动速度。通过将 sysctl 变量 vfs.ffs.compute_summary_at_mount
设置为非零值,可以恢复之前的行为。
修复了 NFS 服务器中的内核崩溃。更多详细信息,请参见勘误通知 FreeBSD-EN-05:01.nfs。
2.2.6 第三方软件
ACPI-CA 已从 20040527 更新到 20041119。
2.3 用户空间变更
程序 ftpd(8) 现在正确使用 212 和 213 状态码来表示目录和文件状态(以前的版本使用 211)。这一行为在 RFC 959 中有所描述。
getaddrinfo(3) 函数现在在指定 AF_UNSPEC 时,先查询 A DNS 资源记录,再查询 AAAA 记录。一些损坏的 DNS 服务器在不存在的 AAAA 查询上返回 NXDOMAIN,即使应该返回 NOERROR 并带有空的返回记录。对于 IPv4/IPv6 双栈节点,这是一个问题,因为对 AAAA 记录的第一次查询返回的 NXDOMAIN 会导致查询服务器停止尝试解析 A 记录(如果有的话)。此外,这种行为已被识别为潜在的拒绝服务攻击(详情请参见 http://www.kb.cert.org/vuls/id/714121)。注意,尽管查询顺序已变更,但返回结果仍会首先包含 AF_INET6
记录,然后是 AF_INET
记录。
gpt(8) 工具的 create
命令现在支持命令行参数 -f
,即使磁盘上有 MBR 记录也强制创建 GPT。
gvinum(8) 工具现在支持子命令 checkparity
、rebuildparity
和 setstate
。
libarchive 库(以及使用该库的 tar(1) 命令)现在支持读取 ISO 镜像(可选的 RockRidge 扩展)和 ZIP 存档(支持 deflate 和无压缩)。
新增了 libgpib 库,允许用户空间通过 ibfoo
API 访问 GPIB 设备(使用驱动 pcii)。
从 HEAD 合并了一些 bug 修复到 libpthread。
在 math(3) 库中实现了一些新函数,包括 ceill(3)、floorl(3)、ilogbl(3)、fma(3) 及其衍生、lrint(3) 及其衍生、lround(3) 及其衍生。
moused(8) 守护进程现在支持“虚拟滚动”,即在按住中键时的鼠标动作会被解释为滚动。此功能可以通过 -V
参数启用。
为 named(8) 动态区域新增一个单独的目录,该目录由 bind 用户拥有(用于创建区域日志文件)。更多细节请参见示例动态区域中的 named.conf(5)。
工具 newfs(8) 现在支持 -n
参数,防止在新文件系统上创建 .snap
目录。此功能适用于不需要快照支持的内存或 vnode 文件系统。
工具 newfs(8) 现在在创建无法支持快照的 UFS/UFS2 文件系统时会发出警告。在文件系统非常大且块大小较小时,可能会发生这种情况。
已新增编译时开关 NO_NIS
,启用该 Makefile 变量将会使多个程序排除 NIS 支持,并且不会构建 NIS 实用工具。
工具 ncal(1) 现在支持 -m
参数,用于生成当前年份指定月份的日历。
periodic(8) 安全输出现在支持显示来自 pf(4) 的封包计数信息。
程序 ppp(8) 现在实现了 echo
参数,可以独立启用 LCP ECHO,而不依赖 LQR 报告。旧版本的 ppp(8) 在协商失败时会回退到 LCP ECHO 模式。现在需要明确指定启用回声才能得到此行为。
修复了程序 pppd(8) 中的两个 bug。它们可能导致不正确的 CBCP 响应,从而违反了 Microsoft PPP 回调控制协议第 3.2 节。
工具 restore(8) 恢复了读取 FreeBSD 版本 1 转储磁带的能力。
工具 rm(1) 现在支持 -I
选项,要求在递归删除目录或命令行中列出超过 3 个文件时进行确认(仅一次)。
动态链接器 rtld(1) 现在支持通过 LD_LIBMAP
环境变量指定库替换。此变量将覆盖 libmap.conf(5) 中的条目。
函数 strftime(3) 现在支持一些 GNU 扩展,如 -
(不填充)、_
(使用空格填充)和 0
(零填充)。
函数 syslog(3) 现在是线程安全的。
工具 syslogd(8) 现在打开了一个额外的域套接字(默认为 /var/run/logpriv
),并且权限为 0600,供特权程序使用。这可以防止特权程序在本地拒绝服务攻击导致域套接字没有缓冲区空间时发生锁定。
syslogd(8) 现在支持 -S
选项,允许变更特权套接字的路径名。如果不希望守护进程接收来自本地套接字的任何消息(默认使用 /var/run/log
和 /var/run/logpriv
),可以使用此选项。
syslogd(8) 工具现在允许在主机名规范中使用 : 和 %
字符。这些字符用于 IPv6 地址和作用域 ID。
systat(1) 的 -netstat
显示现在支持 IPv6。
tail(1) 工具的 -f
选项现在支持同时处理多个文件。
新增了来自 OpenBSD 的命令 tcpdrop(8),用于关闭选定的 TCP 连接。
whois(1) 现在支持 -k
参数,用于查询 whois.krnic.net
(韩国国家互联网发展局),该局持有韩国境内 IP 地址分配的详细信息。
修复了一个 bug,该 bug 会导致配置文件的最后一行(如 hosts(5)、services(5) 等)如果没有以换行符结尾,则被忽略。
2.3.1 /etc/rc.d
脚本
/etc/rc.d
脚本rc.conf(5) 现在能在启动时变更网络接口名称。例如:
rc.conf(5) 现在支持变量 tmpmfs_flags
和 varmfs_flags
。这些变量可用于向工具 mdmfs(8) 传递额外选项,以自定义 md(4) 文件系统创建的细节,例如启用/禁用软更新、指定文件系统的默认所有者等。
2.4 第三方软件
BIND 已从版本 9.3.0 更新至 9.3.1。
Heimdal 已从 0.6.1 更新至 0.6.3。
已新增截至 2005 年 2 月 4 日的 OpenBSD netcat 快照。更多信息请参阅 nc(1) 手册页。
OpenSSL 已从 0.9.7d 更新至 0.9.7e。
sendmail 已从版本 8.13.1 更新至 8.13.3。
时区数据库已从 tzdata2004e 更新至 tzdata2004g。
2.5 Ports/Packages 基础设施
ports/INDEX*
文件(记录了 ports 中所有条目的索引)已从 CVS 仓库中移除。这些文件生成的频率很低,因此通常是过时且不准确的。需要索引文件的用户(例如用于 portupgrade(1) 等程序)可以通过以下两种方式获取索引文件的副本:
通过在
ports/
树的顶层运行make index
,基于当前的 ports 生成索引文件。通过在
ports/
树的顶层运行make fetchindex
,从网络上获取索引文件。此索引文件通常可在一天内保持最新状态。
2.6 发布工程与集成
在之前的 FreeBSD 发行版中,disc1 CD-ROM(或 ISO 镜像)是一个可引导的安装盘,包含基本系统、ports 树以及常用软件包。而 disc2 CD-ROM(或 ISO 镜像)则是一个可引导的“修复”盘,包含一个 live 文件系统,用于紧急修复。现在,这种布局已发生改变。除了 ia64 架构以外,disc1 镜像现在包含基本系统的分发文件、ports 树以及 live 文件系统,使其既适合初次安装,也适合修复用途。(在 ia64 架构中,由于 live 文件系统的大小,live 文件系统被单独存放在另一张磁盘上。)软件包被放置在其他磁盘上;特别是,disc2 镜像包含诸如桌面环境等常用软件包。此外,FreeBSD 文档项目提供的文档也存放在 disc2 上。
GNOME 桌面环境的支持版本已从 2.6.2 更新为 2.10。关于在 FreeBSD 上运行 GNOME 的更多信息,请访问 FreeBSD GNOME 项目 的网页。
注意
使用旧版 GNOME 桌面环境(x11/gnome2)的用户在升级时需特别小心。仅通过 FreeBSD Ports 使用 portupgrade(1)(sysutils/portupgrade)进行升级将会导致严重问题。GNOME 桌面用户应仔细阅读 http://www.FreeBSD.org/gnome/docs/faq210.html 的说明,并使用 gnome_upgrade.sh 脚本正确升级到 GNOME 2.10。
KDE 桌面环境的支持版本已从 3.3.0 更新至 3.4.0。关于在 FreeBSD 上运行 KDE 的更多信息,请访问 KDE on FreeBSD 的网页。
注意:
使用旧版 KDE 的用户应遵循 KDE on FreeBSD 网页或
ports/UPDATING
中记录的升级流程。
Xorg 的支持版本已从 6.7.0 更新为 6.8.2。
2.7 文档
以下手册页因来源于 RFC 且可能侵犯 IETF 的版权,现已被替换:gai_strerror(3)、getaddrinfo(3)、getnameinfo(3)、inet6_opt_init(3)、inet6_option_space(3)、inet6_rth_space(3)、inet6_rthdr_space(3)、icmp6(4) 和 ip6(4)。
3 从之前的 FreeBSD 版本升级
强烈建议 使用现有 FreeBSD 系统的用户阅读“FreeBSD 5.4-RELEASE 迁移指南”。此文档通常命名为 MIGRATE5.TXT,可以在发行版媒体或其他发行说明相关文档中找到。该文档提供了从 FreeBSD 4.X 迁移的一些注意事项,更重要的是,还讨论了升级到 FreeBSD 5.X 与继续运行 FreeBSD 4.X 的相对优劣。
重要:
仅在 备份所有数据和配置文件 之后,方可尝试升级 FreeBSD。
可从 ftp://ftp.FreeBSD.org/ 下载此文件以及其他发行相关文档。
如对 FreeBSD 有疑问,请在联系 questions@FreeBSD.org 之前先阅读 文档。
如对本文档有疑问,请发送邮件至 doc@FreeBSD.org。
最后更新于