从 wtmp 切换到 Y2038 安全的 wtmpdb

2023年6月28日 | Thorsten Kukuk | 无许可

简介

随着最近的更新,openSUSE MicroOS、Tumbleweed 及其变体引入了一个新软件包:wtmpdb

这是一个 wtmp 的替代品。

Y2038

为什么我们需要 wtmp 的替代品?wtmp 已经非常古老且被广泛接受了?

在 2038 年 1 月 19 日 03:14:07 UTC,32 位 time_t 计数器将会溢出。到目前为止,普遍的说法是,在具有 64 位 time_t 的 64 位系统上,您在 Y2038 问题方面是安全的。但 glibc 为了与 32 位用户空间应用程序兼容,即使在 64 位系统上,在某些地方也使用 32 位 time_t。这就是 struct utmp 的情况,它被 wtmp 使用。

将 glibc 中的 struct utmp 更改为使用 64 位 time_t 非常复杂,并且在任何情况下都与 ABI 不兼容,此外,磁盘上的格式也会发生不兼容的更改。出于这些原因,glibc 开发者计划在未来某个时候弃用该 API。

出于这些和其他原因,我们开发了 wtmpdb,它通过 PAM 模块 pam_wtmpdb.so 收集所有数据,并且 wtmpdb last 提供了与 last 兼容的替代品。

wtmpdb last 应该可以立即工作,并显示与 last 本身相似的输出。下一步是将 last 链接到 wtmpdb last,并将旧的 last 二进制文件重命名为 last.legacy

目前没有计划完全禁用写入 wtmp 条目,这很可能与 utmp 一起发生。直接读取 wtmp 的应用程序应该继续工作,但这种应用程序非常罕见。写入 wtmp 文件的应用程序不应该产生任何问题。

这对用户意味着什么?

希望:什么也没有

wtmpdb 已经引入到我们的代码库中,并且将默认安装。对于较旧的系统,更新应该会自动拉取它,并且 systemd 单元应该会自动启用。如果您的系统上未安装软件包 wtmpdb,可以使用以下命令安装它:

  • 在 MicroOS 及其变体上:transactional-update in wtmpdb 并重启以激活它
  • 在 Tumbleweed 上:zypper in wtmpdb

重要提示

由于大约一年前 systemd-presets-common-SUSE 中的一个错误,wtmpdb 单元文件 wtmpdb-update-boot.servicewtmpdb-rotate.timer 并没有像应该的那样始终启用。如果您没有进行全新安装,请自行启用它们

  • systemctl enable --now wtmpdb-update-boot.service
  • systemctl enable wtmpdb-rotate.timer

类别: 博客

标签

分享这篇文章