从 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.service 和 wtmpdb-rotate.timer 并没有像应该的那样始终启用。如果您没有进行全新安装,请自行启用它们
systemctl enable --now wtmpdb-update-boot.servicesystemctl enable wtmpdb-rotate.timer
类别: 博客
标签