FreeBSD 4.4 RELEASE i386 发行公告(2001 年 9 月 20 日)
FreeBSD 项目
版权 © 2000, 2001 FreeBSD 文档项目所有
1 介绍
本文档包含了 FreeBSD 4.4-RELEASE 在 i386 硬件平台上的发布说明。它介绍了自 4.3-RELEASE 以来,FreeBSD 新增(及变更)的新特性。
此版本的 FreeBSD 4.4-RELEASE 是一个发布版本。它可以在 ftp://ftp.FreeBSD.org/pub/FreeBSD/ 或其任何镜像站点找到。有关如何获取该版本(或其他版本)信息,请参考 FreeBSD 手册 中的 “获取 FreeBSD”附录。
2 新特性
本节介绍了自 4.3-RELEASE 以来,FreeBSD 中最具用户可见性的新增或变更特性。
由于篇幅限制,许多其他变更未在此列出。例如,文档已得到修正和改进,修复了小错误,审查和纠正了不安全的编码实践,并清理了源代码。
发布说明项目分为三个不同的部分。 第 2.1 节 列出了 FreeBSD 内核的最新变更。与安全相关的修复,包括与安全公告相关的内容,在 第 2.2 节 中列出。最后,第 2.3 节 介绍了 FreeBSD 用户空间应用程序的变更。
2.1 内核变更
已向 open(2) 和 fcntl(2) 新增参数 O_DIRECT
。为已打开的文件指定此参数将尽量减少读取和写入时的缓存效应。
已新增一个 orm(4) 设备来声明 ISA 内存 I/O 空间中的选项 ROM,以防止其他驱动程序错误地分配与这些 ROM 冲突的地址。
内存交换不足时的进程终止代码现已提前开始终止进程,以避免死锁;它现在还会在计算进程大小时考虑进程使用的交换空间。
网络设备克隆已实现,且 gif(4) 设备已修改为利用这一特性。因此,不再需要在内核配置文件中指定有多少 gif(4) 接口,而应使用 ifconfig(8) 的 create
选项来创建其他设备实例。
已引入两个新的 ddb(4) 命令,hwatch
和 dhwatch
。与 watch
和 dwatch
类似,它们会安装硬件断点(如果架构支持),而非软件断点。
已新增空串行端口终端驱动程序 nmdm(4) 。
stl(4) 驱动程序现在支持 Stallion Technologies 基于 Signetics SC26C194/8 智能四端口/八端口 UART 的 PCI 和 ISA EasyIO 多端口串行卡。
maxusers 内核配置参数现在是一个可调的引导时变量。基于 maxusers 的内核参数现在也可以调节,并且可以在引导时覆盖。hz 参数现在也是一个可调参数。
FreeBSD 引导加载程序现在包含一个解决方法,以支持在某些 IBM BIOS 上通过光盘启动,这些 BIOS 期望模拟软盘的第一个扇区包含可以修改的有效 MS-DOS BPB。
2.1.1 处理器/主板支持
已新增对新处理器的检测,例如 Transmeta Crusoe 和带有 LongRun 的 Transmeta Crusoe。
引入了对流媒体 SIMD 扩展(SSE)的支持。内核选项 CPU_ENABLE_SSE
控制是否将此支持编译进内核。
2.1.2 网络接口支持
fxp(4) 驱动程序现在需要在内核配置文件中新增设备 miibus
条目。
wx(4) 驱动程序现在支持 Intel PRO1000-F 和 PRO1000-T(10/100/1000)适配器。
an(4) 驱动程序现在支持 Cisco Aironet 350 系列适配器,并且已修复了一些错误;混杂模式现在可以正常工作,并且可以在启动前进行配置。
xl(4) 驱动程序现在支持接收 VLAN 标记帧(在 “Cyclone” 或更新的芯片组上)。
ti(4) 驱动程序正确地屏蔽 VLAN 标记。
新增 nge(4) 驱动程序,支持基于 National Semiconductor DP83820 和 DP83821 Gigabit Ethernet 控制器芯片的 PCI 千兆以太网适配器,包括 D-Link DGE-500T、SMC EZ Card 1000(SMC9462TX)、Asante FriendlyNet GigaNIC 1000TA 和 1000TPC 以及 Addtron AEG320T。此驱动程序支持发送和接收校验和卸载。
已新增 lge(4) 驱动程序,以支持 Level 1 LXT1001 NetCellerator Gigabit Ethernet 控制器芯片。此设备用于一些来自 SMC、D-Link 和 Addtron 的光纤 GigE 卡。支持接收时的大帧和 TCP/IP 校验和卸载,但不支持硬件 VLAN 过滤。
tx(4) 驱动程序现在支持光纤 SMC 9432FTX 网卡。
ed(4) 驱动程序现在支持 D-Link DL10022 芯片,这是 NetGear FA-410TX 和其他网卡所必需的。因此,使用 ed(4) 驱动程序的内核配置现在需要设备 miibus。
已新增 txp(4) 驱动程序,支持基于 3Com 3XP Typhoon/Sidewinder(3CR990)芯片组的网卡。
2.1.3 网络协议
TCP 现在在 rc.conf(5) 中默认启用 RFC 1323 扩展。
如果没有收到第三个 SYN 数据包的响应,则 RFC 1323 和 RFC 1644 TCP 扩展现在会在连接进行中时禁用。这种行为旨在绕过(非常旧的)终端服务器中存在的有缺陷的 VJ 标头压缩实现。
已删除内核选项 TCP_RESTRICT_RST
。可以通过 sysctl 变量 net.inet.tcp.blackhole
实现类似的功能。
TCP 实现现在不再需要为每个连接分配 TCP 模板结构;这应减少在处理大量连接的系统上的缓冲区使用。
新增的 sysctl net.inet.ip.check_interface
(默认为关闭)会使 IP 验证传入的数据包是否到达具有与数据包目标地址匹配的地址的接口。
新增的内核选项 RANDOM_IP_ID
会随机化 IP 数据包的 ID 字段。这解决了一个小的信息泄漏问题,避免远程观察者通过观察 ID 字段来判断机器生成数据包的速率,因为默认行为是对每个发送的数据包递增计数器。
2.1.4 磁盘和存储
asr(4) 驱动程序现在支持 Adaptec 2000S 和 2005S 零通道 RAID 控制器。
aac(4) 驱动程序现在支持 Adaptec SCSI RAID 5400S 控制器。
ata(4) 驱动程序再次默认启用写缓存。
2.1.5 文件系统
已在内核中新增 smbfs(CIFS)支持。相应的用户态文件系统挂载工具可以在 FreeBSD Ports 中的 Port net/smbfs 找到。
已新增一个基于哈希的简单查找优化方法,名为 dirhash
,专门用于大目录。基于内核选项 UFS_DIRHASH
,它提高了对非常大目录的操作速度,但会消耗一些内存。
2.1.6 PCCARD 支持
在许多现代主机上,PCCARD 设备可以配置为通过 ISA 或 PCI 中断路径来路由它们的中断。已更新 pcic(4) 驱动程序,以支持这两种中断路径(之前只支持通过 ISA 路由)。在大多数情况下,笔记本电脑中 PCMCIA 设备的配置更简单且更灵活。此外,现在支持各种 Cardbus 桥 PCI 卡(如用于 Orinoco PCI NIC 的卡)。某些主机可能会遇到问题,如挂起或 panic,使用 PCI 中断路由时;可以通过强制使用旧版 ISA 中断路由来使其正常工作。以下行可能会解决该问题:
在这样的系统上安装 FreeBSD 时,输入以下行到引导加载程序可能有助于首次启动 FreeBSD:
PCCARD 弹出有时会导致系统挂起;对于这些情况的解决方法是执行:
2.1.7 多媒体支持
已新增对 Advance Logic ALS4000 的驱动程序。
2.1.8 第三方软件
IPFilter 已更新到 3.4.20。
2.1.8.1 isdn4bsd
isdn4bsd 已更新到版本 1.0.1。由于此更新,使用 i4bisppp(4)(内核 PPP over ISDN)驱动程序的用户 必须 现在使用 ispppcontrol(8) 而不是 spppcontrol(8) 来配置和控制这些网络接口。
为支持 Cologne Chip Designs HFC 设备的 ihfc(4) 驱动程序已新增。
为支持 NETjet-S / Teles PCI-TJ 设备的 itjc(4) 驱动程序已新增。
已为 Eicon.Diehl DIVA 2.0 和 2.02 ISA PnP ISDN 卡的 isic(4) isdn4bsd 驱动程序新增实验性支持。
现在可以使用 i4bcapi(4) 和 iavc(4) 驱动程序支持由 AVM 制造的基于 CAPI 的 ISDN 卡。支持的卡包括 AVM B1 PCI 和 AVM B1 ISA 基本速率卡,以及 AVM T1 主速率卡。
现在在 isdnd.rc(5) 文件中接受一个新的 maxconnecttime 关键字,用于限制连接可以保持的时间。
2.1.8.2 KAME
IPv6 堆栈现在基于 KAME 项目自 2001 年 5 月 28 日的 IPv6 快照。此部分列出的多数项目都是此次导入的结果。2.3.1.2 节 列出了 KAME IPv6 堆栈的用户态更新。
gif(4) 现在基于 RFC 2893,而不是 RFC 1933。可以使用 IFF_LINK2
接口参数来控制流入过滤。
IPSec 得到了一些增强,包括能够使用 Rijndael 和 SHA2 算法。由于专利问题,IPSec 对 RC5 的支持已被移除。
stf(4) 现在符合 RFC 3056;可以使用 IFF_LINK2
接口参数来控制流入过滤。
IPv6 现在可以更好地检查物理网络上的非法地址(例如回环地址)。
IPv6 的 IPV6_V6ONLY 套接字选项现已完全支持。内核对该选项的默认行为由 sysctl 变量 net.inet6.ip6.v6only
控制。
现已支持 RFC 3041(无状态地址自动配置的隐私扩展)。可以通过 sysctl 变量 net.inet6.ip6.use_tempaddr
启用此功能。
2.2 安全相关的变更
安全公告 FreeBSD-SA-01:39 中提到的安全修复(关于 TCP 连接的初始序列号生成)引发了一些潜在的兼容性问题。为缓解这一影响,现在可以使用 sysctl 变量 net.inet.tcp.tcp_seq_genscheme
启用/禁用该修复。
fts(3) 例程中存在的漏洞(应用程序用于递归遍历文件系统)可能允许程序操作超出预期目录层次结构的文件。此漏洞已修复(参见安全公告 FreeBSD-SA-01:40)。
portmap(8) 现在默认关闭,尽管在启用 NFS 服务、NIS 服务或通过 rc.conf(5) 启用 amd(8) 时会自动启动。
一个缺陷允许某些信号处理程序在子进程执行时仍然有效,这使得攻击者能够在 setuid 二进制文件的上下文中执行任意代码。此缺陷已被修复(参见安全公告 FreeBSD-SA-01:42)。
修复了 tcpdump(1) 中的远程缓冲区溢出(参见安全公告 FreeBSD-SA-01:48)。
修复了 telnetd(8) 中的远程缓冲区溢出(参见安全公告 FreeBSD-SA-01:49)。
新增的 net.inet.ip.maxfragpackets 和 net.inet.ip6.maxfragpackets sysctl 变量限制了 IPv4 和 IPv6 数据包碎片可能消耗的内存,从而防范某些拒绝服务攻击(参见安全公告 FreeBSD-SA-01:52)。
sysinstall(8) 中可用的“安全配置文件”数量已减少至两个。
所有在新安装中启用的服务默认在 inetd.conf
中禁用。sysinstall(8) 提供启用或禁用 inetd(8) 的选项,以及编辑 inetd.conf 的功能。
修正了 ipfw(8) 在点对点链路上对 me 规则的实现缺陷。之前,me 过滤规则会匹配点对点接口的远程 IP 地址,而不仅仅是预期的本地 IP 地址(参见安全公告 FreeBSD-SA-01:53)。
修补了 procfs(5) 中的漏洞,该漏洞可能允许进程读取另一个进程的内存空间中的敏感信息(参见安全公告 FreeBSD-SA-01:55)。
tcp_wrappers 中的 PARANOID 主机名检查现已按预期工作(参见安全公告 FreeBSD-SA-01:56)。
修复了 sendmail(8) 中的本地 root 漏洞(参见安全公告 FreeBSD-SA-01:57)。
修复了 lpd(8) 中的远程 root 漏洞(参见安全公告 FreeBSD-SA-01:58)。
修复了 rmuser(8) 中的竞态条件问题,该问题导致 /etc/master.passwd
暂时变为全局可读(参见安全公告 FreeBSD-SA-01:59)。
所有标准系统路径中非 root 所有的二进制文件现在都设置了 schg
参数,以防止在 cron(8) 中由 root 或非文件所有者用户运行时成为漏洞载体。此外,uustat(1) 现在通过 /etc/periodic/daily/410.status-uucp
以 uucp 用户身份运行,而非 root 用户。
修复了 semop(2) 系统调用中的安全漏洞,该漏洞表现为缓冲区溢出。
2.3 用户空间变化
ip6fw(8) 现在可以使用预处理器,并在从文件读取时使用参数 -q
(静默)。
ping(8) 现在支持 -m
选项来设置传出的数据包的TTL(生存时间)。
ln(1) 现在可以使用 -h
参数,以避免跟踪作为链接的目标,并且还提供 -n
参数以与其他实现兼容。
find(1) 现在提供 -anewer
、-cnewer
、-mnewer
、-okdir
和 -newer[acm][acmt]
主句,用于比较文件时间戳。
ELF 动态链接器的性能已得到提升。
ifconfig(8) 现在可以接受斜杠/CIDR 表示法的地址。
c89(1) 已从 Shell 脚本转换为二进制可执行文件,修复了一些小错误。
vidcontrol(1) 现在支持 -p
选项,可以拍摄 syscons(4) 视频缓冲区的快照。这些快照可以通过 graphics/scr2png 工具进行处理。
vidcontrol(1) 现在允许用户在加载字体时省略字体大小规格,并且改进了错误处理。
telnet(1) 现在支持 -u
参数,允许连接到 UNIX 域(AF_UNIX
)套接字。
newfs(8) 现在提供 -U
选项,可以在新文件系统上启用软更新。
libcrypt 现在支持 Blowfish 密码哈希。
FreeBSD 控制台新增了对乌克兰语的支持。
savecore(8) 现在可以在拥有 2 GB 或更多内存的机器上正常工作。
inetd(8) 对 faithd(8) 的支持语法已与其他 BSD 兼容。
inetd(8) 中的 ident 协议支持已被清理和更新。
inetd(8) 现在可以管理 UNIX 域套接字。
FreeBSD 中的 resolver(3) 现在实现了 EDNS0 支持,在使用支持 IPv6 传输的解析器/DNS 服务器时将是必需的。
df(1) 现在提供 -l
选项,仅显示关于本地挂载的文件系统的信息。
whois(1) 现在会将查询 IP 地址的请求定向到 ARIN。如果查询 ARIN 时提到 APNIC 或 RIPE,则会查询相应的服务器,只要没有指定 -Q
选项。
dump(8) 的 -T
选项不再吞掉额外的参数。
dump(8) 增加了新的 -D
选项,可以变更 /etc/dumpdates
文件的路径。
libfetch 现在支持环境变量 HTTP_USER_AGENT
。
getprogname(3) 和 setprogname(3) 库函数已新增,用于操控当前程序的名称。它们由错误报告例程使用,以生成一致的输出。
xargs(1) 现在支持 -J replstr
选项,允许用户指定将从标准输入读取的数据插入命令行参数中的特定位置,而不是插入到末尾。
ifconfig(8) 现在支持设置 IEEE 802.11 无线网络设备的参数。支持 wi(4) 和 an(4) 设备。
ifconfig(8) 不再默认显示支持的媒体列表。改为在给定 -m
选项时才显示。
lpd(8) 现在新增了两个选项:-c
将所有连接错误记录到 syslogd(8),-W
允许来自非保留端口的连接。
lpc(8) 已改进;lpc clean
现在更安全,并且新增了命令 lpc tclean
,用于检查 lpc clean
会删除哪些文件。
du(1) 现在提供命令行参数 -I
,可以忽略/跳过匹配指定 Shell 通配符模式的文件和子目录。
growfs(8) 是用于扩展 FFS 文件系统的工具,已添加。ffsinfo(8) 是一个用于转储现有文件系统所有元信息的工具,也已添加。
mail(1) 现在提供 -E
参数,用于避免发送空正文的邮件。
vidcontrol(1) 现在支持 -C
选项,用于清除给定 tty 的历史缓冲区,以及 -h
选项,用于设置历史缓冲区的大小。
last(1) 现在实现了 -d
选项,可以提供在特定日期和时间登录的“快照”。
libcrypt 和 libdescrypt 已统一,提供了一个可配置的密码认证哈希库。提供 md5 和 des 哈希方法,除非特意编译移除 des 哈希方法。
install(1) 现在具有一些新功能,包括用于备份现有目标文件的 -b
和 -B
选项,以及用于“安全”(原子复制)操作的 -S
选项。默认情况下,-c
(复制)参数现在是默认选项,-D
(调试)参数已被撤销。install(1) 现在会在同时使用 -d
(创建目录)和 -C
(仅复制已变更文件)选项时发出警告。
FreeBSD 的 Makefile 基础设施现在支持来自 NetBSD 的 WARNS
指令。该指令以相对编译器中立的方式控制将编译器警告参数新增到 CFLAGS
。
已新增新的 fsck_msdosfs(8) 工具,用于检查 MS-DOS 文件系统的一致性。
新增了 kldconfig(8) 工具,便于操作内核模块搜索路径。
moused(8) 现在提供 -a
选项以控制鼠标加速度。
tcpmssfixup ppp(8) 选项现在会调整传入和传出的 TCP SYN 数据包的最大接收段大小。
sysctl(8) 现在支持 -N
选项,仅打印变量名。
sysctl(8) 已将 -A
和 -X
选项替换为 -ao
和 -ax
,前者现已废弃。-w
参数也已废弃;它不再需要确定用户的意图。
cdcontrol(1) 现在支持 next
和 prev
命令,可以在播放音频 CD 时跳过指定数量的曲目。
col(1) 现在提供 -p
参数,强制未知控制序列不改变地通过。
tmpnam(3) 现在将使用 TMPDIR 环境变量(如果设置了)来指定临时文件的位置。
rc(8) 现在在启动时会删除 /var/run
和 /var/spool/lock
中的所有非目录文件。
fmtcheck(3),一个用于检查格式字符串参数一致性的函数,已添加。
apmd(8) 现在可以监控电池电量,并根据剩余的电池百分比或分钟数通过 apm_battery
配置指令执行命令。请参见 /etc/apmd.conf
中的注释示例,以了解语法。
pppd(8)(内核级 PPP 的控制程序)现在的安装模式为 4550
和 root:dialer
,而不是 4555(换句话说,已不再是全局可执行的)。pppd(8) 用户可能需要变更其组设置。
2.3.1 第三方软件
BIND 现在使用参数 NOADDITIONAL 构建,这使得 named(8) 在某些常见的配置错误情况下能够更加一致地运行。
BIND 已更新至 8.2.4-REL。
Binutils 已升级到 2.11.2。
bzip2 1.0.1 已导入;这将 bzip2(1) 程序和 libbz2 库带入基本系统。
ee(1) Easy Editor 已更新至 1.4.2。
file 已更新至 3.36。
gcc(1) 现在支持环境变量 GCC_OPTIONS,该变量可以存储 GCC 的一组默认选项。
GNATS 已更新至 3.113。
groff 及其相关工具已更新至 FSF 版本 1.17.2。此次导入带来了新的 mdoc(7) 宏包(有时称为 mdocNG
),去除了前任的许多限制。
libpcap 已更新至 0.6.2。
OpenSSL 已升级至 0.9.6a。
sendmail 及其相关工具已升级至版本 8.11.6。有关更多信息,请参见 /usr/src/contrib/sendmail/RELEASE_NOTES
。
traceroute(8) 现在从 sysctl 变量 net.inet.ip.ttl
中获取默认的最大 TTL 值。
tcpdump 已更新至 3.6.3。
2.3.1.1 CVSup
CVSup,FreeBSD Ports 中的一个常用工具,曾通过多个 Port 和包进行安装。现不再需要或提供 Port/包 net/cvsup-bin 和 net/cvsupd-bin ,应该改用 port net/cvsup 。
CVSup 已更新至 16.1_3,现可通过 FreeBSD Ports 获取 net/cvsup。此更新修复了一个长期存在的(但最近才遇到的)错误,该错误影响了 2001 年 9 月 9 日 01:46:40 UTC 之后的所有文件时间戳(即 UNIX 纪元后的 10 亿秒)。
2.3.1.2 KAME
IPv6 堆栈现在基于 KAME 项目于 2001 年 5 月 28 日的 IPv6 快照。本节中列出的多数内容是此导入的结果。Section 2.1.8.2 列出了内核更新至 KAME IPv6 堆栈的内容。
faithd(8) 现在支持用于访问控制的配置文件。
ifconfig(8) 现在可以执行 gifconfig(8) 的功能。
ifconfig(8) 现在可以执行 prefix(8) 的功能。prefix(8) 现在是一个用于部分向后兼容的 shell 脚本。
ndp(8) 现在实现了对过时 NDP 条目的垃圾回收,如 RFC 2461(IPv6 邻居发现协议)中所述。
pim6dd(8) 和 pim6sd(8) 因受限的许可条件被移除。这些程序可以在 Ports 中通过 net/pim6dd 和 net/pim6sd 获取。
route6d(8) 现在支持 -n
参数,以避免更新内核转发表。
rtadvd(8) 的 -R
(路由器重新编号)选项当前被忽略。
2.3.2 Ports/软件包
pkg_version(1) 现在支持 -s
参数,以限制其操作仅针对与给定字符串匹配的 Port/包。
3 从旧版 FreeBSD 升级
如果你正在从先前的 FreeBSD 版本进行升级,最可能的是你使用的是 4.X 版本,具体是否存在问题取决于你选择的升级方式。升级 FreeBSD 发行版的两种常用方法是:
通过
/usr/src
使用源代码亦可使用 sysinstall(8) 的二进制升级
请阅读 INSTALL.TXT 文件以获取更多信息,最好在开始升级之前阅读。如果你是通过源代码升级,请确保阅读 /usr/src/UPDATING
。
最后,如果你希望使用各种方法跟踪 FreeBSD 的 -STABLE 或 -CURRENT 分支,请确保查阅 -CURRENT vs. -STABLE 部分的 FreeBSD 手册。
该文件及其他与发行版相关的文档可以从 ftp://ftp.FreeBSD.org/pub/FreeBSD/ 下载。
有关 FreeBSD 的问题,请在联系 questions@FreeBSD.org 之前阅读 文档。
所有 FreeBSD 4-STABLE 的用户应订阅 stable@FreeBSD.org 邮件列表。
有关此文档的问题,请发送电子邮件至 doc@FreeBSD.org。
最后更新于