FreeBSD 5.0 RELEASE i386 发行公告(2003 年 1 月 14 日)
FreeBSD 项目
版权所有 © 2000, 2001, 2002, 2003 由 FreeBSD 文档项目所有
FreeBSD 5.0-RELEASE 的发行说明包含了对 5-CURRENT 开发分支中 FreeBSD 基本系统的最近变更摘要。内容包括内核和用户空间的变更,以及自上一个版本发布以来发布的适用安全公告。同时,还提供了一些关于升级的简要说明。
1 引言
本文档包含了适用于 i386 硬件平台的 FreeBSD 5.0-RELEASE 的发行说明。它介绍了 FreeBSD 中最近新增、修改或删除的功能,同时提供了一些关于从早期版本升级到此版本的说明。
FreeBSD 5.0-RELEASE 的发行版本可以通过 ftp://ftp.FreeBSD.org/ 或其镜像站点获取。关于获取此版本(或其他版本)发行版的更多信息,请参阅 FreeBSD 手册 的 “获取 FreeBSD”附录。
2 新增内容
本节概述了自 FreeBSD 4.0-RELEASE 以来,FreeBSD 中许多用户可见的新功能或已变更的功能。它包括 5-CURRENT 分支特有的内容,以及一些最近合并到其他分支(FreeBSD 4.6-RELEASE 之后)的功能。后者标记为 [已合并]。
典型的发行说明包括新驱动程序或硬件支持、新命令/选项、主要错误修复或第三方的软件升级。4.6-RELEASE 发布后发布的相关安全公告也在此列出。
此外,FreeBSD 还有许多未列出的变更,由于篇幅限制未能包含在此。例如,文档得到了纠正和改进、修复了小错误、审计并修正了不安全的编码实践以及清理了源代码。
2.1 内核变化
执行 a.out(5) 格式的可执行文件现在需要在内核配置中新增选项 COMPAT_AOUT
,或者加载内核模块 aout.ko
。
acct(2) 已变更为以追加模式打开会计文件,这样可以使用 accton(8) 将会计功能启用到仅追加的文件中。[已合并]
初步支持蓝牙设备,已通过一系列 Netgraph 模块(详见 ng_bluetooth(4))实现。两个模块提供了蓝牙适配器的设备驱动支持:ng_bt3c(4) 驱动支持 3Com/HP 的 Bluetooth PCCARD 适配器,而 ng_ubt(4) 驱动支持多个 USB Bluetooth 适配器。
注意:
FreeBSD 中的蓝牙支持仍在开发中。
从 OpenBSD 导入了新的内核加密框架(详见 crypto(4) 和 crypto(9))。该框架为内核中的硬件和软件加密算法提供了一致的接口,同时允许用户模式应用程序访问加密硬件。提供了支持基于 hifn 的卡(hifn(4))和基于 Broadcom 的卡(ubsec(4))的硬件设备驱动程序。[已合并]
新增 ddb(4) 命令 show pcpu
,可列出每个 CPU 的数据。
新增一个 devctl
设备,用于让用户空间程序感知设备树中设备的新增或移除。此功能主要由 devd(8) 实用程序使用。
devfs(5) 进行了大幅度重构。它允许自动创建 /dev
目录中的条目,并支持更灵活的设备挂载。现在默认启用 [devfs(5)],可以通过内核选项 NODEVFS
禁用它。“规则”子系统允许管理员在新设备节点对用户空间可见之前定义其属性。支持静态(例如 /dev/speaker
)和动态(例如 /dev/bpf*
,一些可移动设备)节点。每个 [devfs(5)] 挂载点可以分配不同的规则集,从而为 jail 等场景实现不同的策略。规则和规则集由 devfs(8) 实用程序操作。
新增了驱动 digi ,以支持基于 PCI Xr 和 ISA Xem 的 Digiboard 卡。新程序 digictl(8) 主要用于重新初始化附带外部端口模块的卡(例如 PC/Xem)。该驱动替代了旧的驱动 dgm。
新增 eaccess(2) 系统调用,与 access(2) 类似,但前者使用有效凭据,而非真实凭据。
新增了对 FireWire 设备的初步支持(详见 firewire(4))。[已合并]
现在,每个 jail(2) 环境可以在自己的安全级别下运行。
与 [jail(2)] 相关的可调 sysctl 变量已从 jail.*
移动到 security.*
层级。其他安全相关的 sysctl 变量从 kern.security.*
移动到 security.*
。
内核环境现在是动态的,可以通过新的 kenv(2) 系统调用进行变更。
由于“失效”,已移除驱动 [labpc(4)]。
加载器和内核链接器现在在每个包含 KLD 的目录中寻找名为 linker.hints
的文件,用于将模块名称和版本映射到 KLD 文件名。新工具 kldxref(8) 用于生成这些文件。
新增了内核模块 lomac(4) ,这是一个低水印强制访问控制安全机制,作为传统 UID 基安全设施的补充。无需管理员额外配置即可使用。此功能由美国国防高级研究计划局和 NAI Labs 赞助开发。
FreeBSD 现支持可扩展的强制访问控制框架(TrustedBSD MAC Framework)。该框架允许可加载内核模块在编译、启动或运行时与内核链接,以增强系统安全策略。框架支持模块对多种事件的关注,并提供通用安全策略服务,如标签存储。本次发行中包括多种示例策略模块,例如固定和浮动标签的 Biba 完整性模型、多级安全性(MLS,带隔离组件)以及多个增强的 UNIX 安全模型(如文件系统防火墙)。此功能有助于本地和厂商安全扩展的开发和维护。可通过在内核配置中新增 options MAC
启用此扩展性服务。
注意:
此版本中的 MAC 框架被视为实验功能,默认未启用。
新增 mutex(9) 分析代码,通过内核配置选项 MUTEX_PROFILING
启用。它会启用 sysctl 变量 debug.mutex.prof.*
层级。
P1003_1B 内核选项已废弃并被移除。
新增了对 PECOFF(Win32 可执行文件格式)的支持。
随机(4) 设备已重写为使用 Yarrow 算法。它从多种中断源收集熵,包括控制台设备、以太网和点对点网络接口以及大容量存储设备。现在,设备 [random(4)] 的熵会定期保存到 /var/db/entropy
文件中,也会在关机时保存。/dev/random
的语义发生了变化;它不再等待熵位,而是生成伪随机数据流,并且行为与 /dev/urandom
完全一致。
新增内核选项 options REGRESSION
,用于启用正确性和回归测试所需的接口和功能。
新增了 RLIMIT_VMEM
支持。此功能定义了覆盖进程整个虚拟内存空间(包括 mmap(2) 空间)的新资源限制。此限制可通过 login.conf(5) 中的新变量 vmemoryuse
配置。[已合并]
修复了 sendfile(2) 系统调用中的一个漏洞,该漏洞会将头部数据计入需要发送的文件大小。[已合并]
syscons(4) 驱动现在支持键盘控制的粘贴功能,默认快捷键为 Shift + Insert。
新增了用于 USB 音频设备的驱动 uaudio。[已合并]
新增 ubsa 驱动以支持 Belkin F5U103(及兼容的)USB 转串口适配器。
新增了 ucom(4) 设备驱动,用于支持 USB 调制解调器、串口设备和需要模拟 tty 的程序。相关的 uftdi(4)、uplcom(4) 和 uvscom(4) 驱动分别提供了对 FTDI 串口适配器、Prolific PL-2303 串口适配器以及 SUNTAC Slipper U VS-10U 的支持。[已合并]
为提高安全性,移除了内核配置选项 UCONSOLE
。
现已移除启动时的内核配置工具 UserConfig
,通常用于启用、禁用或配置 ISA 设备,。其功能已由 /boot/device.hints
中的内核提示文件取代。
已默认启用内核选项 USER_LDT
。
新增了 uvisor(4) 驱动,用于通过 USB 连接 Handspring Visors。[已合并]
新增 VESA S3 线性帧缓冲区驱动。
内核崩溃转储基础设施已被重新设计,以支持新平台并改进代码逻辑。此变更的一个影响是内核转储的磁盘格式已变更,现在具有字节序无关性。
极大的交换区(超过 67 GB)不会再导致系统崩溃。
链接器(Linker Sets)现在是自包含的,已移除工具 gensetdefs(8)。
现在可以使用 config(8) 的 ENV 指令在编译时硬编码内核环境变量(如可调参数)。
可以通过设置 vm.idlezero_enable
sysctl 变量启用空闲页零填充功能。
FreeBSD 内核调度器现支持 Kernel-Scheduled Entities (KSE),为每个进程提供类似于调度激活(Scheduler Activations)的多线程支持。目前,内核已具备支持线程的大部分改动。内核调度器可以为每个进程调度多个线程,但一次只能在一个 CPU 上运行。更多信息请参见 kse(2)。
注意:
KSE 是个正在开发中的功能。
内核现在支持多个低级控制台设备。新增的 conscontrol(8) 工具可帮助管理不同的控制台。
内核内存分配器现为类似于 Solaris 中的 slab 内存分配器。这是一种支持 SMP 的内存分配器,CPU 数量增加时几乎能达到线性性能,并且能够减少内存碎片。
2.1.1 处理器/主板支持
SMP 支持进行了大规模重构,融入了来自 BSD/OS 5.0 的代码。SMPng(“SMP 下一代”)的主要功能之一是允许更多进程在内核中运行,而无需使用会显著降低多处理器效率的自旋锁。中断处理程序现在具有与之关联的上下文,这些上下文允许其被阻塞,从而减少了锁定中断的需求。
从 GENERIC 内核中移除了对 80386 处理器的支持,因为这段代码会严重降低其他 IA32 处理器的性能。支持 80386 处理器的内核选项 I386_CPU
现在与支持其他 IA32 处理器互相排斥;此变更通过消除运行时处理器类型检查,略微提高了 80386 的性能。仍然可以通过变更内核配置文件中的 CPU 选项,仅包括 I386_CPU
来构建在 80386 上运行的自定义内核。
在某些系统上,BIOS 未激活 PC 设备的 I/O 端口和内存,从而导致这些设备无法使用。sysctl/引导加载器变量 hw.pci.enable_io_modes
(默认值为 1
,即“启用”)会强制 FreeBSD 启用这些设备,使其可用。
新增了对 AMD Élan SC520 的支持;这需要在内核配置文件中新增选项 CPU_ELAN
。[已合并]
新增内核配置选项 CPU_DISABLE_CMPXCHG
。启用该选项已被证明能够显著提高 VMWare 客户端操作系统安装的性能。
注意:
该选项与 SMP 内核不兼容。
2.1.2 引导加载器变更
内核和模块已移至目录 /boot/kernel
,以便于统一管理。引导加载器已更新以尽可能平滑地实现此变更。
引导加载器现在支持从 UFS1 和 UFS2 文件系统加载内核。
2.1.3 网络接口支持
驱动 dc(4) 现支持基于 Xircom 3201 和 Conexant LANfinity RS7112 芯片的网卡。
驱动 el(4) 现在可以作为模块加载。
新增驱动 lmc ,用于支持基于 DEC “Tulip” PCI 快速以太网控制器的 LAN Media Corp WAN 适配器。
驱动 rp(4) 已更新至版本 3.02,并且现在可以作为模块构建。[已合并]
设备 stf(4) 现已支持克隆。
驱动 tx(4) 现在支持真正的多播过滤。
网络设备现在会自动出现在 /dev/net
下作为特殊文件。这些设备可执行接口硬件 ioctl
操作(非协议或路由相关)。特殊文件 /dev/network
上也可以执行 SIOCGIFCONF ioctl
操作。
网络栈已新增“零拷贝”支持。此功能可以消除内核与用户空间之间网络数据的一次拷贝,这是网络吞吐量的主要瓶颈之一。发送端代码几乎可适配任何网络适配器,而接收端代码需要网络适配器支持至少一个内存页面大小的 MTU(例如千兆以太网的巨型帧)。详情请参阅 zero_copy(9)。
2.1.4 网络协议
现在,内核选项 FAST_IPSEC
允许 IPsec 实现使用内核的 crypto(4) 框架,并支持硬件加速加密。
注意:
选项
FAST_IPSEC
和IPSEC
是互斥的。
注意:
目前选项
FAST_IPSEC
与 IPv6 或 INET6 选项不兼容。
新增驱动 gre(4) ,它可以使用 GRE(RFC 1701)或用于移动 IP 的最小 IP 封装(RFC 2004)来封装 IP 数据包。[已合并]
现在,ICMP ECHO 和 TSTAMP 回复被限速。由于发送到打开或未打开端口的数据包生成的 TCP RST 也受单独计数器的限制。每个限速队列现在都有自己的描述。
转发的数据包不再生成 ICMP Source Quench 消息。可以通过 sysctl 变量 net.inet.ip.sendsourcequench
重新启用旧行为。
IP 多播现在在 VLAN 设备上有效。VLAN 代码中的其他一些错误也已修复。
已重新实现 ipfw(4)(新版本通常称为 “IPFW2”)。现在,它使用内核中可变大小的规则表示,类似于 bpf(4) 指令。大部分外部可见行为(即通过 ipfw(8))应保持不变,尽管 ipfw(8) 现在支持匹配字段之间的或连接符。[已合并]
新增了网络图节点类型 ng_device(4) ,该节点在 /dev
中创建设备条目,作为网络图的入口点。
新增了网络图节点 ng_gif(4) 和 ng_gif_demux(4) ,用于操作 gif(4) 设备。
新增了网络图节点 ng_ip_input(4) ,用于将 IP 数据包排队到主 IP 输入处理代码中。
新增了网络图节点类型 ng_l2tp(4) ,它实现了 L2TP 协议的封装层,如 RFC 2661 所描述。[已合并]
新增一个节点类型 ng_split
,用于将双向数据包流分割成两个单向流。
用于 TCP 和 UDP 的临时端口范围已变更为 49152-65535(旧默认值为 1024-5000)。这增加了并发外部连接/流的数量。
tcp(4) 协议的重传定时器现在可以通过两个 sysctl 变量进行调整,分别是 net.inet.tcp.rexmit_min
和 net.inet.tcp.rexmit_slop
。默认值已从 1 秒降低到 200 毫秒(类似于 Linux 的默认值),以更好地处理交互连接中的卡顿并改善无线链路等丢包快速连接上的恢复。
tcp(4) 协议现在具备动态限制发送端窗口的功能,以最大化带宽并最小化往返时延。该功能可以通过 sysctl net.inet.tcp.inflight_enable
启用。[已合并]
2.1.5 磁盘与存储
新增驱动 ahd(4),支持 Adaptec AIC7901、AIC7901A 和 AIC7902 Ultra320 PCI-X SCSI 控制器芯片。[已合并]
驱动 ata(4)(以及 burncd(8))现在支持写入 DVD+RW 驱动器中的介质。
驱动 ata(4) 现在支持通过 CAM 层和驱动程序(cd(4)、da(4)、st(4) 和 pass(4))访问 ATA 设备作为 SCSI 设备。此功能需要在内核配置中启用 atapicam
设备。更多信息请参见 atapicam(4)。[已合并]
驱动 ata(4) 现在支持 Sil 0680 和 VIA 8233/8235 控制器。[已合并]
驱动 ata(4) 现在支持 Acard ATP850、ATP860 和 ATP865 控制器。
驱动 cd(4) 现在支持与 acd(4) 驱动相同的 CDRIOCREADSPEED 和 CDRIOCWRITESPEED ioctl,用于设置 CDROM 访问速度。
已重写驱动 targ(4) ,并且在 /usr/share/examples/scsi_target
中新增了用户模式,模拟直接访问设备。
磁盘驱动 fdc(4) 经过多次改进。常见设置的密度选择现在是自动的;驱动程序在设置各个子设备的密度方面也更加灵活。
新增磁盘 I/O 请求转换框架 geom(4) ;此可扩展框架旨在支持各种各样的 I/O 请求操作,从上层内核到设备驱动的过程中。
注意:
启用 GEOM 的内核不再支持“兼容切片”。此功能(仅支持 i386 和 pc98)允许用户在不指定 MBR 切片的情况下引用磁盘分区(例如:
/dev/ad0a
);内核会自动查找第一个适用的 FreeBSD 切片并使用它。在启用 GEOM 的内核(默认内核)中,仅允许使用完整的分区名称(例如:/dev/ad0s1a
)来引用 MBR 切片中的分区。此变更影响的用户非常少。
新增了基于 GEOM 的磁盘加密模块。它提供了对“冷磁盘”的访问拒绝功能,具有四种不同的加密屏障和最多四个可变更的密码短语。更多信息请参见 gbde(4) 手册页。gbde(8) 用户空间工具提供了此模块的操作和管理接口。此功能默认未启用;需要在内核配置文件中新增 GEOM_BDE
选项。
注意:
此功能应视为实验性。
驱动 isp(4) 现在主动发现光纤通道拓扑的变化。
驱动 isp(4) 现在支持 Qlogic SCSI 卡的目标模式,包括 Ultra2、Ultra3 和双总线卡。
已移除驱动 matcd(4) ,因为在源代码中已废弃且存在许可条款方面的担忧。这些问题正在处理,并且此驱动可能会在未来的 FreeBSD 版本中重新出现。[已合并]
md(4),内存磁盘设备,已将 vn(4) 的功能合并到其中。md(4) 设备现在可以通过 mdconfig(8) 配置。vn(4) 已移除,内存文件系统(MFS)也已移除。
新增了驱动 mpt,用于支持 LSI Logic Fusion/MP 架构的光纤通道控制器。[已合并]
新增了驱动 pst(4) ,用于支持 Promise SuperTrak ATA RAID 控制器。[已合并]
RAIDframe 磁盘驱动已从 NetBSD 导入。该驱动提供软件 RAID 0、1、4 和 5 功能以及其他功能。更多信息请参见 raid(4) 驱动手册页。raidctl(8) 工具用于配置和取消配置磁盘阵列。此功能默认未启用,要求将 raidframe
设备配置到内核中。
注意:
此功能应视为实验性。
修复了 sa(4) 错误处理中的一些问题,包括 “磁带驱动器无限旋转” 的问题。
SCSI_DELAY
配置参数现在可以在启动时和运行时通过可调项/sysctl kern.cam.scsi_delay
设置。
新增了驱动 trm,用于支持使用 Tekram TRM-S1040 SCSI 芯片组的 SCSI 适配器。[已合并]
2.1.6 文件系统
已为 FreeBSD 内核新增对命名扩展属性的支持。这使得内核和具有适当权限的用户空间进程可以为文件和目录新增属性数据。扩展属性的新增是为了支持 TrustedBSD 项目,特别是 ACL(访问控制列表)、能力数据和强制访问控制标签(有关详细信息,请参阅 /usr/src/sys/ufs/ufs/README.extattr
)。
已新增 FFS(Unix 文件系统)的文件系统快照功能。可以在 /usr/src/sys/ufs/ffs/README.snapshot
中找到详细信息。
当使用软更新(Soft Updates)运行时,statfs(2) 和 df(1) 将跟踪已承诺释放的块和文件数量。
已废弃并移除了 kernfs(5)。
已实现客户端 NFS 锁。
内核中的客户端和服务器端 NFS 代码曾经在各种复杂的方式中交织在一起,现在已被拆分,便于维护和进一步开发。
引入了对文件系统访问控制列表(ACL)的支持,允许对文件和目录进行更精细的自主访问控制。此支持集成自 TrustedBSD 项目。更多详细信息可参见 /usr/src/sys/ufs/ufs/README.acls
。
为了保持一致性,fdesc、fifo、null、msdos、portal、umap 和 union 文件系统已被重命名为 fdescfs、fifofs、msdosfs、nullfs、portalfs、umapfs 和 unionfs。适用的地方,模块和 mount_*
程序也已重命名。已在 mount(8) 中新增兼容性“粘合”功能,使得在 fstab(5) 中的 msdos 文件系统条目无需变更即可正常工作。
已新增 pseudofs,一个伪文件系统框架。 linprocfs(5) 和 procfs(5) 已被修改为使用 pseudofs
。
网络文件系统(如 NFS 和 smbfs 文件系统)现在可以在启动初始化过程中正确挂载;其挂载会延迟,直到网络初始化完成。
已新增对通用磁盘格式(UDF)的只读支持。此格式用于数据包写入的 CD-RW 和大多数商业 DVD-视频磁盘。可以使用 mount_udf(8) 命令挂载这些磁盘。
已为 UFS2 文件系统新增基本支持。UFS2 的新特性包括:
inode 扩展为 256 字节,以容纳 64 位块指针。
新增文件创建时间字段。
新增本地扩展属性实现,允许 inode 上存储的总属性大小最多为文件系统块大小的两倍。此存储用于访问控制列表(ACL)和 MAC 标签,但也可以供其他系统扩展和用户应用程序使用。
UFS1 仍然是默认的磁盘格式,尽管可以在 newfs(8) 或 sysinstall(8) 的分区屏幕中选择 UFS2。64 位平台可以从 UFS2 根文件系统启动。
为了支持本节提到的新特性,UFS1 超级块格式进行了小幅度修改。当早于 FreeBSD 4.7-RELEASE 的系统尝试 mount(8) 或 fsck(8) 由 FreeBSD 5.0-RELEASE 或更高版本创建的本地 UFS1 文件系统时,可能会出现兼容性问题。FreeBSD 4.7-RELEASE 及更高版本是完全兼容的。这种情况通常出现在安装了多个版本 FreeBSD 的双启动机器上。
2.1.7 PCCARD 支持
已新增初步的 CardBus 支持,使用 NEWCARD。这段代码支持 32 位和 16 位卡片。所有 CardBus 桥接器都受支持,包括 TI-1030 PCMCIA-PCI 桥接器。目前尚不支持其他 PCMCIA-PCI 桥接器和 ISA 桥接器。
NEWCARD 现在是 GENERIC 内核中的默认 PCCARD/CardBus 系统。
2.1.8 多媒体支持
VT8233 音频控制器现在拥有自己的驱动程序,以便支持所有已知版本的硬件。它可以通过在内核配置中新增设备 pcm 或在 /boot/loader.conf
中新增 snd_via8233="YES"
来在启动时加载。此项工作得到 VIA 提供的文档支持。[已合并]
为具有硬件音量控制的声卡新增一个新的 API。
ich 声音驱动程序现在提供对 ich4 音频支持的基本支持。[已合并]
已新增驱动程序以支持直接渲染基础设施(Direct Rendering Infrastructure),可用于在 XFree86 中提供 3D 加速。支持的显卡包括 3Dlabs Oxygen GMX 2000(gammadrm)、AGP Matrox G200/G400/G450/G550(mgadrm)、3dfx Voodoo 3/4/5/Banshee(tdfxdrm)、AGI ATI Rage 128(r128drm)以及 AGP ATI Radeon(radeondrm)。
2.1.9 第三方软件
启动加载器中使用的 Forth Inspired Command Language(FICL)已更新至 3.02。
已新增对高级配置和电源接口(ACPI)的支持,这是一个多厂商标准,用于配置和电源管理。此功能由 Intel ACPI 组件架构 项目提供,从 ACPI CA 20021118 快照开始。为使用旧的 APM 标准的应用程序提供了一些向后兼容性。
2.1.9.1 IPFilter
IPFilter 已更新至 3.4.29。[已合并]
2.1.9.2 isdn4bsd
isdn4bsd 已更新至版本 1.0.2。
isdn4bsd 现在支持 Q.931 子寻址。
2.1.9.3 KAME
2.2 安全相关变更
已修复解析器中的缓冲区溢出漏洞,该漏洞可能被恶意的域名服务器或伪造 DNS 消息的攻击者利用。更多细节请参见安全公告 FreeBSD-SA-02:28。[已合并]
已修复 tcpdump(1) 中的缓冲区溢出漏洞,该漏洞可能由格式错误的 NFS 数据包引发。更多细节请参见安全公告 FreeBSD-SA-02:29。[已合并]
ktrace(1) 现在无法追踪曾经具有特权的进程操作;这防止了进程在放弃特权之前获取的敏感信息泄露。有关此问题的讨论,请参见安全公告 FreeBSD-SA-02:30。[已合并]
已修复 pppd(8) 中的竞争条件漏洞,该漏洞可能被用来变更任意文件的权限。更多信息请参见安全公告 FreeBSD-SA-02:32。[已合并]
通过升级基本系统中的 OpenSSL,修复了多个缓冲区溢出漏洞。更多细节请参见安全公告 FreeBSD-SA-02:33。[已合并]
已修复 XDR 解码器中的堆缓冲区溢出漏洞。更多信息请参见安全公告 FreeBSD-SA-02:34。[已合并]
已修复一个可能允许本地用户读取和写入 FFS 文件系统任意块的漏洞。更多细节请参见安全公告 FreeBSD-SA-02:35。[已合并]
已修复 NFS 服务器代码中的漏洞,该漏洞可能允许远程拒绝服务攻击。更多细节请参见安全公告 FreeBSD-SA-02:36。[已合并]
已修复一个可能允许本地用户通过 kqueue(2) 机制让系统崩溃的漏洞。更多信息请参见安全公告 FreeBSD-SA-02:37。[已合并]
已修复多个系统调用中的边界检查漏洞,这些漏洞可能导致部分系统调用返回大量内核内存。更多信息请参见安全公告 FreeBSD-SA-02:38。[已合并]
已修复一个可能导致使用 libkvm 的应用程序泄露敏感文件描述符的漏洞。更多细节请参见安全公告 FreeBSD-SA-02:39。[已合并]
已修复 kadmind(8) 和 k5admin 中的缓冲区溢出漏洞。更多细节请参见安全公告 FreeBSD-SA-02:40。[已合并]
已修复 smrsh(8) 中的错误,该错误可能允许用户绕过程序执行限制。更多信息请参见安全公告 FreeBSD-SA-02:41。[已合并]
已修复 DNS resolver(3) 中的缓冲区溢出漏洞,该漏洞可能导致某些应用程序失败。更多信息请参见 FreeBSD-SA-02:42。[已合并]
已修复 BIND 中的多个漏洞,详细信息请参见 FreeBSD-SA-02:43。[已合并]
已修复 fpathconf(2) 系统调用中的文件描述符泄漏漏洞,该漏洞可能允许本地用户使系统崩溃或引发权限提升。更多细节请参见安全公告 FreeBSD-SA-02:44。[已合并]
2.3 用户空间变化
不再支持使用基本系统的编译工具链创建 a.out(5) 格式的可执行文件。
adduser(8) 和 rmuser(8) 现在是 sh(1) 脚本,而不是 Perl 脚本。
arp(8) 现在为那些类型的接口上的地址打印标签 [fddi]
或 [atm]
。
新增工具 asa(1) ,用于解释 FORTRAN 行控制符。
at(1) 现在支持命令行选项 -r
以删除任务,和选项 -t
以使用 POSIX 时间格式指定时间。
系统的 awk(1) 现在引用 BWK awk。
basename(1) 现在接受 -a
和 -s
参数,允许对多个文件执行 basename(3) 函数。
biff(1) 现在接受 b
参数来启用新邮件的“铃声通知”(不会像 biff y
那样干扰终端内容)。[已合并]
biff(1) 现在使用与标准输入、标准输出或标准错误文件描述符关联的第一个终端(按此顺序)。因此,可以使用 shell 的重定向功能(例如 biff n < /dev/ttyp1
)来切换其他终端的通知。
burncd(8) 现在支持 Disk At Once (DAO) 模式,可以通过 -d
参数选择。[已合并]
burncd(8) 现在具有写入 VCD/SVCD 的功能。[已合并]
burncd(8) 现在接受 max
作为选项 -s
的值,以设置驱动器的最大写入速度。[已合并]
bzgrep(1),bzegrep(1),和 bzfgrep(1) 添加,以在 bzip2(1) 压缩文件上执行 grep(1)-类型的操作。
calendar(1) 现在接受 -W
选项,操作类似于 -A
,但不对周末进行特殊处理,并且有 -F
选项来改变“星期五”的定义。
catman(1) 现在是 C 程序,而不再是 Perl 脚本。
cdcontrol(1) 现在支持 speed
命令,以设置驱动器使用的最大速度(可以通过将 speed
设置为 max
来选择最大可能速度)。[已合并]
新增 check_utility_compat(3) 库函数,用于确定某些 FreeBSD 基本系统工具是否应以 FreeBSD 4 兼容模式或“标准”模式(默认是标准模式)运行。配置通过 malloc(3) 风格进行,可以通过环境变量或符号链接进行配置。
chflags(1) 已从 /usr/bin
移动到 /bin
。
chmod(1) 现在支持 -h
用于修改符号链接的模式。
chmod(1) 现在,当模式被修改时,如果多次指定 -v
选项,将打印旧模式和新模式。
chown(8) 不再将 .
作为用户/组分隔符。此变更是为了支持包含 .
字符的用户名。
使用 CSMG_*
宏不再需要包含 <sys/param.h>
为了与 FreeBSD 4-STABLE 兼容,增加了 compat4x 发行版。它包括 FreeBSD 4.7-RELEASE 版本所分发的部分库文件。
cp(1) 现在接受一个(非标准)-n
选项,在要求覆盖文件时自动回答“否”。[已合并]
新增工具 csplit(1) ,它基于上下文拆分文件。
ctags(1) 现在默认创建 typedefs
、structs
、unions
和 enums
的标签(意味着 -t
选项)。新的 -T
选项恢复到旧的行为。
程序 daemon(8) ,作为 daemon(3) 的命令行接口,已经新增。它从控制终端分离并执行命令行上指定的程序。这允许用户像写守护进程一样运行任意程序。[已合并]
新增了工具 devd(8) ,用户空间守护进程,当设备在设备树中进出时运行任意命令。该程序是 pccardd(8) 部分功能的通用化。
注意:
devd(8) 仍在开发中。
devinfo(8) 是一款简单的工具,用于打印设备树和设备的资源使用情况,已经新增。
diskpart(8) 已被声明为过时,并已删除。
dump(8) 现在支持 -L
参数,用于安全地转储活动的 UFS 和 UFS2 文件系统。为了获取一致的转储映像,dump(8) 会对文件系统进行快照,并在快照上执行转储操作。快照在转储完成后被删除。
dump(8) 现在支持新的 -S
参数,允许它仅打印转储大小估算并退出。[已合并]
expr(1) 现在符合 POSIX.2-1992(因此也符合 POSIX.1-2001)。一些程序依赖于旧的历史行为,并未正确保护它们的参数,以防止它们被误解为命令行选项。(例如,包/Port devel/libtool ,被许多 GNU 程序使用,是一个显著的例子)。可以通过启用 expr(1) 的兼容模式来请求旧的行为,具体信息请参见 check_utility_compat(3)。
fbtab(5) 现在接受目标设备的全局匹配模式,而不仅仅是单个设备和目录。
fdisk(8) 如果没有在命令行中指定设备,将不再尝试搜索设备,而是尝试从根设备推断默认设备名称。
fdread(1) 是一个读取软盘数据的程序,已新增。它是 fdwrite(1) 的对等程序,旨在提供一种恢复坏介质中至少部分数据的方法,并避免需要复杂调用 dd(1)。
finger(1) 现在支持 .pubkey
文件。[已合并]
finger(1) 现在支持 -g
参数,仅打印用户的全名。[已合并]
finger(1) 现在支持 -4
和 -6
参数,以指定远程查询的地址族。[已合并]
fold(1) 现在支持 -b
参数,在字节位置断开,和 -s
参数,在单词边界断开。[已合并]
已导入包装程序 fsck(8);此功能为 fsck(8) 提供支持不同类型文件系统的基础设施(类似于 mount(8))。
已修改 fsck(8) 在处理各种过程时的行为(如 /etc/fstab
),以适应多磁盘文件系统。
fsck(8) 现在支持前台(-F
)和后台(-B
)检查。传统上,fsck(8) 在文件系统挂载之前调用,并且所有检查在此时完成。如果可以进行后台检查,fsck(8) 会被调用两次。第一次在传统时间,即文件系统挂载之前,使用 -F
参数检查所有无法进行后台检查的文件系统。然后在系统完成多用户模式后,第二次使用 -B
参数进行后台检查。与前台检查不同,后台检查是异步启动的,这样其他系统活动即使在正在检查的文件系统上也可以继续进行。此功能的开机启用由 rc.conf(5) 中的选项 background_fsck
控制。
fsck_ffs(8) 现在支持通过 -B
选项对已挂载的 FFS 文件系统进行后台文件系统检查(这些文件系统必须启用软更新)。-F
参数现在决定是否需要对指定的文件系统进行前台检查。
ftpd(8) 现在支持 -m
选项,允许访客用户根据文件系统权限修改现有文件。特别是,这使得访客用户可以继续上传文件。[已合并]
ftpd(8) 现在支持 -M
选项,以防止访客用户创建目录。[已合并]
ftpd(8) 现在支持 -o
和 -O
选项来禁用 RETR
命令;前者适用于所有用户,后者仅适用于访客用户。结合 -A
选项和适当的文件权限,可以创建一个相对安全的匿名 FTP 投放箱,供他人上传文件。[已合并]
ftpd(8) 现在支持 -W
选项,以禁用将 FTP 会话日志记录到 wtmp(5) 文件中。[已合并]
已新增工具 fwcontrol(8) ,用于帮助用户访问和控制 FireWire 子系统。[已合并]
已新增工具 getconf(1).它打印 POSIX 或 X/Open 路径或系统配置变量的值。[已合并]
已废弃并移除 gifconfig(8).其功能现在由 ifconfig(8) 的 tunnel 和 deletetunnel
命令处理。
gprof(1) 现在有 -K
选项,用于启用从当前运行的内核进行动态符号解析。通过这个变化,正确编译的 KLD 模块现在可以进行性能分析。
已移除脚本 ibcs(8)、linux(8)、osf1(8) 和 svr4(8)(它们的唯一作用是加载仿真内核模块)。内核模块系统将自动按需加载它们以满足依赖。
ifconfig(8) 现在可以通过新的 promisc
参数设置接口的混杂模式。[已合并]
ifconfig(8) 现在支持一个监视接口参数,用于阻止该接口上传输数据包。此功能对于监控网络流量而不与网络交互非常有用。
默认情况下,inetd(8) 不再由 rc(8) 在启动时运行,但 sysinstall(8) 在二进制安装过程中提供了启用选项。通过将以下行新增到 /etc/rc.conf
,可以启用 inetd(8):
inetd(8) 现在具有限制单个 IP 地址同时调用每个服务的最大次数的能力。[已合并]
ipfw(8) 过滤规则现在可以根据 IPv4 优先级字段的值进行匹配。
kbdmap(1) 和 vidfont(1) 已从 Perl 转换为 C。
kenv(1) 现在可以设置或删除内核环境变量。
已移除工具 kget(8)(它仅对 UserConfig 有用,而 UserConfig 在 FreeBSD 5.0-RELEASE 中不可用)。
killall(1) 不再尝试杀死僵尸进程,除非指定了 -z
参数。
ktrdump(8),一个用于从用户空间转储 ktr
跟踪缓冲区的工具,已新增。
ldd(1) 现在支持 -a
参数,用于列出每个已加载对象所需的所有对象。
libc 现在默认是线程安全的;libc_r
仅包含线程函数。
libstand 现在支持覆盖 UFS 文件系统中文件的内容(由于文件系统可能存在脏数据或不一致性,无法扩展或截断文件)。
libgmp 已被 libmp 替代。
libposix1e 中的函数已集成到 libc 中。
lock(1) 现在接受 -v
选项,以禁用在当前终端锁定时切换虚拟终端。这允许通过单一终端锁定整个控制台。[已合并]
lpc(8) 得到了改进;lpc clean
现在更加安全,并且新增了 lpc tclean
命令,用于检查 lpc clean
将删除哪些文件。已重新实现 lpc topq
,现在允许更灵活地指定应移动哪些任务(如任务编号范围或主机名)。新增了 lpc bottomq
命令,用于将任务移动到打印队列的底部,另外,新增了 lpc setstatus
命令,用于设置打印机的状态消息。[已合并]
ls(1) 程序现在支持 -m
选项来按页列出文件,-p
选项来强制在目录后打印 /
,以及 -x
选项来按页排序文件名。[已合并]
makewhatis(1) 现在是 C 程序,而不是 Perl 脚本。
man(1) 不再安装 SUID man,以减少与生成“catpages”(预格式化的手册页面,便于重复查看)相关的漏洞。因此,普通用户不能为自己创建系统 catpages。如果用户对包含 catpages 的目录有写权限(例如,用户自己的手册页面)或当前用户是 root,则仍然可以创建。
已新增命令 mdmfs(8) ;它是 mdconfig(8)、disklabel(8)、newfs(8) 和 mount(8) 的包装器,模拟已废弃的 mount_mfs(8) 的命令行选项集。
mesg(1) 现在符合 SUSv3 标准。它现在使用与标准输入、标准输出或标准错误文件描述符关联的第一个终端(按此顺序)。因此,可以使用 shell 的重定向功能(如 mesg n < /dev/ttyp1
)来控制其他终端的写访问权限。
mountd(8) 和 nfsd(8) 已从 /sbin
移动到 /usr/sbin
。
mv(1) 现在支持一个非标准的 -n
选项,用于在询问是否覆盖文件时自动回答“否”。[已合并]
已移除许多过时的 newfs(8) 功能;这些功能实现了对现代硬盘几乎没有用处的调优选项。这些功能是通过 -O
、-d
、-k
、-l
、-n
、-p
、-r
、-t
和 -x
参数控制的。
newfs(8) 现在支持 -O
参数,用于选择创建 UFS1 或 UFS2 文件系统。
工具 newgrp(1) 用于切换到新组。
newsyslog(8) 现在默认使用 bzip2(1) 压缩日志文件。(可以在 /etc/newsyslog.conf
中指定使用 gzip(1) 的旧行为。)
已新增工具 nextboot(8) ,用于指定下次启动时使用的替代内核/启动参数。此功能的早期版本首次出现在 FreeBSD 2.2 中。
NFS 现在支持通过 IPv6 工作。
nice(1) 现在使用 -n
选项来指定正在运行的实用程序的“友好性”(niceness)。[已合并]
已从 NetBSD 合并 nsswitch 支持。通过创建文件 nsswitch.conf(5),可以配置 FreeBSD 以便通过平面文件、NIS 或 Hesiod 查找各种数据库,如passwd(5)和group(5)。如果 /etc/nsswitch.conf
不存在,它将在系统启动时自动从现有的 /etc/hosts.conf
生成。/etc/hosts.conf
文件可能会被旧的可执行文件使用;如果存在,它将在系统启动时自动从现有的 /etc/nsswitch.conf
生成。
od(1) 现在支持 -A
选项来指定输入地址基,-N
选项来指定要转储的字节数,-j
选项来指定要跳过的字节数,-s
选项来输出带符号的十进制短整型,-t
选项来指定输出类型。[已合并]
PAM 支持已新增用于账户管理和会话。
PAM 配置现在通过 /etc/pam.d/
中的文件来指定,而不是单个的 /etc/pam.conf
文件。/etc/pam.d/README
中有更多详细信息。
已新增回显服务模块 pam_echo(8)。
已新增程序执行服务模块 pam_exec(8)。
已新增模块 pam_ftp(8),以允许匿名 FTP 用户进行身份验证。
已新增模块 pam_ftpusers(8),用于检查 ftpusers(5) 文件。
已新增模块 pam_ksu(8),用于进行 Kerberos 5 身份验证和 $HOME/.k5login
授权,用于 su(1)。
已新增模块 pam_lastlog(8),用于记录 utmp(5)、wtmp(5) 和 lastlog(5)数据库中的会话。
已新增模块 pam_login_access(8),用于检查 /etc/login.access
。
已新增模块 pam_nologin(8),可以禁止使用 nologin(5) 进行登录。
已新增模块 pam_opie(8) 和 pam_opieaccess(8),用于控制通过 opie(4) 进行身份验证。[已合并]
已新增模块 pam_passwdqc(8),用于检查在变更密码时提交的密码质量。
已新增模块 pam_rhosts(8),以支持 rhosts(5)身份验证。
已加入模块 pam_rootok(8) ,它只能用来认证超级用户。
已加入模块 pam_securetty(8) ,用于检查 TTY 的“安全性”,具体参见 ttys(5)。
已加入模块 pam_self(8) ,它允许用户进行自我认证。
已加入模块 pam_wheel(8) ,允许为某个组的成员进行认证,默认组为 wheel
。
已加入工具 pathchk(1) ,用于检查路径名的有效性或在POSIX系统之间的可移植性。[已合并]
ping(8) 现在支持 -o
参数,收到回复后退出。
已废弃并已移除 prefix(8) ,其功能由 ifconfig(8) 中的 eui64
命令提供。
已加入 pselect(3) 库函数(由 POSIX.1 引入,作为 select(2) 的稍强版本)。
pwd(1) 现在支持 -L
参数来打印逻辑当前工作目录。[已合并]
quota(1) 现在可以使用 -l
参数来抑制 NFS 文件系统上的配额检查。
由 rand(3) 实现的伪随机数生成器已改进,提供了更少偏差的结果。
rcmd(3) 现在支持使用 RSH 环境变量来指定除了 rsh(1) 以外的其他程序进行远程执行。因此,像 dump(8) 这样的程序可以使用 ssh(1) 进行远程传输。
已从基本系统中移除 rdist(1) ,但仍可从 FreeBSD Ports 中的 net/44bsd-rdist 获取。
命令 renice(8) 实现了 -n
选项,用来指定一个增量,应用到进程的优先级上。[已合并]
rpcbind(8) 已替代 portmap(8)。
rpcgen(1) 现在使用 /usr/bin/cpp
(与 NetBSD 一致),而非 /usr/libexec/cpp
。
已从 NetBSD 导入 rpc.lockd(8) 。此守护进程提供支持为客户端提供 NFS 锁服务。
rtld(1) 现在会打印导致每个对象被加载的所有对象的名称,如果定义了环境变量 LD_TRACE_LOADED_OBJECTS_ALL
。
sed(1) 现在支持 -i
选项,启用对文件的原地编辑。[已合并]
已加入命令 setfacl(1) 和 getfacl(1) ,用来管理文件系统访问控制列表。
sh(1) 不再实现 printf
作为内建命令,因为它相对于其他内建命令的价值较低(当然,这一功能仍然可以通过 printf(1) 可执行文件使用)。
sh(1) 现在支持 -C
选项,防止通过输出重定向覆盖现有的常规文件,支持 -u
选项,在展开未设置的变量时给出错误。[已合并]
sh(1) 内建的 cd
命令现在支持 -L
和 -P
参数,分别调用逻辑模式或物理模式操作。逻辑模式为默认模式,但可以通过物理选项来改变默认值。[已合并]
sh(1) 内建的 jobs
命令现在支持 -s
参数,仅输出PID,支持 -l
参数,将PID新增到输出中。[已合并]
sh(1) 现在支持 bind 内建命令,允许修改 shell 的行编辑器的键绑定。
sh(1) 内建的 export
和 readonly
命令现在支持 -p
参数,输出以“可移植”格式显示。[已合并]
sh(1) 不再接受无效构造,如 *command* & && *command*,&& *command*
或 || *command*
。[已合并]
spkrtest(8) 现在是 sh(1) 脚本,而不再是 Perl 脚本。
split(1) 现在支持 -a
选项,用于指定拆分文件的后缀字母数。[已合并]
为符合 SUSv2/POSIX <sys/select.h>
要求,结构体 selinfo 和相关函数已移动至 <sys/selinfo.h>
。
su(1) 现在使用 PAM 进行身份验证。
sysctl(8) 现在接受 -d
选项来打印变量的描述信息。
在 sysinstall(8) 中,默认的根分区现在为 i386 和 pc98 的 100MB,Alpha 的 120MB。
sysinstall(8) 现在位于 /usr/sbin
,从而简化了安装过程。 sysinstall(8) 的手册页也以更一致的方式安装。
sysinstall(8) 不再在新安装时默认挂载 procfs(5) 文件系统。此变更是为了提高安全性,但仍可以通过手动或在 fstab(5) 文件中新增相应行来挂载 procfs(5)。
已新增 tabs(1),一个设置终端制表符位置的工具。
termcap(5) 数据库现在使用 XFree86 的 xterm 终端类型。因此,xterm(1) 默认支持颜色,并且不再需要将 TERM 设置为 xterm-color 作为常见的解决方法。使用 xterm-color 终端类型可能会导致应用程序产生(无害的)警告。
tftpd(8) 现在支持 RFC 2349(TFTP 超时间隔和传输大小选项);此功能是某些固件(如 EFI 启动管理器,至少在 HP i2000 Itanium 服务器上)启动镜像时使用 TFTP 所必需的。
已导入一个版本的传输独立 RPC (TI-RPC) 。
已从 OpenBSD 更新 tip(1) ,并且现在可以充当 cu(1) 的替代品。
top(1) 现在将使用其终端的全部宽度。
touch(1) 现在支持 -h
选项,作用于符号链接,而不是链接指向的内容。
tr(1) 现在基本支持支持等价类的本地化。
tr(1) 现在支持 -C
参数,以补充第一个字符串参数指定的字符集。
tunefs(8) 现在支持 -a
和 -l
参数,用于启用和禁用 UFS 文件系统上的管理参数 FS_ACLS
和 FS_MULTILABEL
。
新增工具 ugidfw(8) ,用于管理 mac_bsdextended
强制访问控制策略提供的规则集,类似于 ipfw(8)。
已从基本系统中删除 UUCP 。它仍然可以在 Ports 中找到,位置为 net/freebsd-uucp。
unexpand(1) 现在支持 -t
选项,用于指定制表符位置,类似于 expand(1)。
usbdevs(8) 现在支持 -d
参数,用于显示与每个设备关联的设备驱动程序。
uuencode(1) 和 uudecode(1) 的 base64 功能现在可以通过分别调用这些工具作为 b64encode(1) 和 b64decode(1) 来自动启用。
已将实现和操作 OSF/DCE 1.1 兼容 UUID 的函数新增到 libc 中。更多信息请参见 uuid(3)。
已新增工具 uuidgen(1) 。它使用新的 uuidgen(2) 系统调用生成一个或多个兼容 OSF/DCE 1.1 版本 1 UUID 的全局唯一标识符。
vidcontrol(1) 现在接受 -S
选项,允许用户禁用 VTY 切换。
vinum(8) 中的默认条带大小已从 256KB 变更为 279KB,以便更均匀地分布超级块。
wc(1) 现在支持 -m
参数,用于计算字符数,而不是字节数。
whereis(1),以前是 Perl 脚本,已用 C 重写。现在它支持 -x
参数来抑制运行 locate(1),并且 -q
参数抑制查询的前导名称。
whereis(1) 现在支持 -a
参数,以报告所有匹配项,而不仅仅是每种请求类型的第一个匹配项。
which(1) 现在是一个用 C 编写的程序,而不再是 Perl 脚本。
who(1) 增加了多个新选项:
-H
显示列标题;-T
显示 mesg(1) 状态;-m
等价于am i
;-u
显示空闲时间;-q
以列格式列出用户名称。 [已合并]
wicontrol(8) 现在支持 -l
列出 hostap 模式下的已关联站点,以及 -L
列出可用的接入点。
xargs(1) 新增 -I replstr
选项,允许用户在命令行参数的特定位置插入从标准输入读取的数据,而不是追加到命令行末尾。(一个 FreeBSD 特有的 -J
选项提供了类似功能。)[已合并]
xargs(1) 现在支持 -L
选项,强制在读取一定数量的行后调用指定的实用程序。[已合并]
C 库中的多个例程现在支持“宽字符”。包括字符类函数(如 wctype(3))、宽字符 I/O 函数(如 getwc(3))、格式化 I/O 函数(如 wprintf(3) 和 wscanf(3)),以及 multibyte(3) 字符的转换函数。
已增强多项实用程序和库功能,以提高对单一 UNIX 规范(SUSv3)和 IEEE 标准 1003.1-2001(“POSIX.1”)的符合性。每个实用程序的发布说明中列出了新增的具体功能。每个实用程序或库函数的手册页中通常会注明其标准符合性。
一些传统的 BSD 游戏已从基本系统中移除。它们现在可通过 Port games/freebsd-games 安装,包括: adventure(6)、arithmetic(6)、atc(6)、backgammon(6)、battlestar(6)、bs(6)、canfield(6)、cribbage(6)、fish(6)、hack(6)、hangman(6)、larn(6)、mille(6)、phantasia(6)、piano(6)、pig(6)、quiz(6)、rain(6)、robots(6)、rogue(6)、sail(6)、snake(6)、trek(6)、wargames(6)、worm(6)、worms(6) 和 wump(6)。用于控制游戏访问的工具 dm(8) 也被移除了,因为它已不再必要。 一些具有“实用工具”功能的游戏,以及 fortune(6),仍然保留。
2.3.1 第三方软件
am-utils 已更新至 6.0.7。
awk 已引入 2002 年 11 月 29 日 Bell Labs 的快照版本(通常被称为“BWK awk”或“The One True AWK”)。该工具可用作 awk
或 nawk
。
BIND 已更新至 8.3.3。[已合并]
Binutils 已更新至 2002 年 10 月 27 日的 2.13.2 预发布快照版本。
file 已更新至 3.39。
gcc 已更新至 3.2.1(正式发布版本)。
警告:
gcc 3.2.1 的 C++ ABI 与早期版本不兼容。
gdb 已更新至 5.2.1 版本。
gperf 已更新至 2.7.2。
groff 及其相关工具已更新至 FSF 版本 1.18.1。
Heimdal Kerberos 已更新至 0.5.1。[已合并]
ISC DHCP 客户端已更新至 3.0.1RC9。
more(1) 命令已被 less(1) 替代,但仍可作为 more
使用。[已合并] 已引入 less 371 版本。
新增一个名为 libbsdxml
的 XML 处理库,服务于基本系统中的 XML 实用工具。该库几乎完全基于 expat 1.95.5,但使用不同的名称安装以避免与 Ports 中的 expat 版本发生冲突。
libpcap 已更新至 0.7.1。[已合并]
libreadline 已更新至 4.2。
libz 已更新至 1.1.4。
lint 已更新至 2002 年 7 月 19 日 NetBSD 的 lint(1) 快照版本。
lukemftp 1.6 beta 2(NetBSD 的 FTP 客户端)已替代 FreeBSD 的程序 ftp(1) 。新功能包括更多自动化方法、更好的标准兼容性、传输速率限制以及可定制的命令行提示符。部分环境变量和命令行参数已变更。
m4(1) 已引入自 OpenBSD 的 2002 年 4 月 26 日版本。[已合并]
ncurses 已更新至 5.2-20020615。
NTP 程序套件已更新至 4.1.1b。
引入了 OpenPAM(“Citronella”版本),替代了 Linux-PAM。
OPIE 一次性密码套件已更新至 2.4,完全替代了 S/Key 的功能。[已合并]
已从 FreeBSD 基本系统中移除 Perl 。用户可通过 FreeBSD Ports、二进制包或 sysinstall(8) 的 Perl 分发项安装。移除 Perl 可简化未来的升级和维护工作。为减少基本系统对 Perl 的依赖,许多实用工具已重写为 Shell 脚本或 C 程序(针对每个受影响的实用工具进行了具体说明)。
注意:
移除 Perl 脚本的工作仍在进行中。
注意:
大多数 sysinstall(8) 分发集中包含了新的 Perl 分发。因此,这一变更对大多数用户是透明的,但需要单独更新 Perl。
已从基本系统中移除 GNU ptx 。由于其未在基本系统中使用且未有近期更新或维护,需要该功能的用户可安装 Port textproc/textutils 。
从 NetBSD 引入了 rc.d
框架。它将系统启动功能分解为 /etc/rc.d
中的小型“任务导向”脚本,并在引导时动态确定启动脚本的顺序。
已引入 smbfs 用户空间实用工具的 1.4.5 版本。[已合并]
GNU sort 已更新至 GNU textutils 2.0.21 中的版本。
已从 NetBSD 的 2002 年 6 月 5 日版本引入 stat(1) 。
GNU tar 已更新至 1.13.25。[已合并]
tcpdump 已更新至 3.7.1。[已合并]
csh(1) Shell 已被 tcsh(1) 替代,但仍可作为 csh
使用。tcsh 已更新至 6.12。[已合并]
第三方版的 tcp_wrappers 现在包括 tcpd(8) 辅助守护程序。虽然在标准 FreeBSD 安装中并非必需(因为 inetd(8) 已包含此功能),但对于替代 inetd(8) 的工具(如 xinetd)可能有用。[已合并]
texinfo 已更新至 4.2。[已合并]
top 已更新至 3.5b12。[已合并]
traceroute 已更新至 LBL 1.4a12 版本。
时区数据库已更新至 tzdata2002d 版本。[已合并]
2.3.1.1 CVS
CVS 已更新为 1 December 2002 的 1.11.2.1 版本快照。[已合并]
2.3.1.2 CVSup
2.3.1.3 KAME
2.3.1.4 OpenSSH
OpenSSH 已更新至 3.4p1 版本。[已合并] 主要更新内容包括:
*2
文件已废弃(例如,~/.ssh/known_hosts
可直接包含~/.ssh/known_hosts2
的内容)。ssh-keygen(1) 现在支持使用 SECSH 公钥文件格式导入和导出密钥,以便与多个商业 SSH 实现进行密钥交换。
ssh-add(1) 现在可以新增所有三个默认密钥。
ssh-keygen(1) 不再默认指定特定密钥类型,必须使用
-t
参数明确指定。新增“权限分离”功能,通过使用无特权进程限制未来的漏洞或程序错误的影响范围。
修复了多个漏洞,包括一个可能导致整数溢出和非预期权限升级的安全问题。
2.3.1.5 OpenSSL
OpenSSL 已更新至 0.9.6g 版本。[已合并]
2.3.1.6 sendmail
sendmail 从 8.9.3 版本升级至 8.12.6 版本。主要变化包括:
sendmail(8) 不再作为 set-user-ID 的 root 二进制文件安装,现在为 set-group-ID smmsp。
默认文件位置已变更(详见
/usr/src/contrib/sendmail/cf/README
)。newaliases(1) 仅限 root 和受信任用户使用。
支持 STARTTLS 加密。
默认启用了 MSA 端口(587)。更多信息请参考
/usr/src/contrib/sendmail/RELEASE_NOTES
。[已合并]
默认情况下,rc(8) 不再启用 sendmail 的 SMTP 入站连接功能。需要注意,sysinstall(8) 可能会根据所选的安全配置覆盖此默认设置。可以通过以下配置手动启用此功能:
通过 /etc/mail/Makefile
构建的 sendmail 别名和映射数据库的默认权限现在为模式 0640
,以防止文件锁定导致的本地拒绝服务攻击。此设置可通过新的 make.conf 选项 SENDMAIL_MAP_PERMS
进行修改。[已合并]
sendmail 统计文件 /var/log/sendmail.st
的权限已从模式 0644
变更为模式 0640
,以防止文件锁定导致的本地拒绝服务攻击。[已合并]
2.3.2 Ports/软件包
BSDPAN 模块集已新增,提供更紧密的 Perl 与 FreeBSD Ports 集成。
在某段时间内,FreeBSD 5.0-CURRENT(以及某些 4.X 版本)中包含了用于更新已安装软件包和依赖项的工具 pkg_update(1)
。该工具现已移除;其功能的超集可在 port sysutils/portupgrade 中找到。
pkg_version(1) 从 Perl 脚本重写为 C 程序。其中经常被误用的 -c
选项已被移除。sysutils/portupgrade port 提供了一个更安全、受支持的替代方案。
Ports 基础设施现在使用 XFree86 4.2.1 作为 X 窗口系统的默认版本以满足依赖。如果需要恢复使用 XFree86 3.3.6,请在 /etc/make.conf
中新增以下行:[已合并]
emulators/linux_base port 安装的库(用于 Linux 仿真)已更新,现在对应 Red Hat Linux 7.1 的库版本。[已合并]
默认情况下,Ports 生成的包(以及 FTP 网站上的包)现在使用 bzip2(1) 进行压缩,而非 gzip(1)。(因此,它们的扩展名现为 .tbz
,而非 .tgz
。)软件包工具已更新以处理新格式。
Ports 现在为 FreeBSD 5-CURRENT 使用单独的索引文件 /usr/ports/INDEX-5
。单独索引文件的主要原因是为了应对某些依赖项(例如 lang/perl5)仅在 FreeBSD 5-CURRENT 中存在,而非 FreeBSD 4-STABLE 中的情况。每个软件包的索引文件仍然命名为 INDEX
。
2.4 发布工程与集成
为了简化创建集成安装/恢复光盘的过程,bin 分发包已重命名为 base。
ISO 映像和 CDROM 现在默认使用 cdboot 启动加载程序。这消除了在可启动 CDROM 上需要模拟软盘映像的需求,同时允许 CDROM 安装使用完整的 GENERIC 内核,但这可能会影响某些旧版 BIOS 的兼容性。
现在可以在 FreeBSD 4-STABLE 主机上制作 FreeBSD 5-CURRENT 的发行版本,反之亦然。还支持跨架构的发行版本(在不同架构的主机上为目标架构构建发行版本)。详情请参考 release(7)。[已合并]
在软盘发行版中增加了第三张驱动软盘 drivers.flp。它包含无法放入 kern.flp 磁盘内核或 mfsroot.flp 映像中的可加载驱动模块。
2.5 文档
4.4 BSD 编程补充文档中一些原先受限制的文档已恢复至 /usr/share/doc/psd
,包括:
The UNIX Time-Sharing System (01.cacm)
UNIX Implementation (02.implement)
The UNIX I/O System (03.iosys)
UNIX Programming -- Second Edition (04.uprog)
The C Programming Language -- Reference Manual (06.Clang)
Yacc: Yet Another Compiler-Compiler (15.yacc)
Lex -- A Lexical Analyzer Generator (16.lex)
The M4 Macro Processor (17.m4)
4.4 BSD 用户补充文档中一些原先受限制的文档已恢复至 /usr/share/doc/usd
,包括:
NROFF/TROFF User's Manual (21.troff)
A TROFF Tutorial (22.trofftut)
3 从旧版本 FreeBSD 升级
强烈建议 现有 FreeBSD 系统的用户阅读《FreeBSD 5.0 早期采用者指南》。该文档通常以 EARLY.TXT 为文件名,存放在发行介质上或发布说明所在的任何位置。文档不仅包含一些升级说明,还讨论了升级到 FreeBSD 5.X 与继续运行 FreeBSD 4.X 的相对优势。
重要提示:
仅在备份 所有 数据和配置文件后尝试升级 FreeBSD。
可以从 ftp://ftp.FreeBSD.org/ 下载此文件以及其他与发布相关的文档。
有关 FreeBSD 的问题,请在联系 questions@FreeBSD.org 之前阅读 文档。
有关此文档的问题,请发送电子邮件至 doc@FreeBSD.org。
最后更新于