FreeBSD 在断电/升级后/曾经无法启动? (ntpd问题...)

FreeBSD 在断电/升级后/曾经无法启动? (ntpd问题...)

编辑:将原始问题留作背景;如果您不感兴趣,请跳至分隔线下方。)

我的住所最近停电了。不幸的是,由于我当时外出,我无法在 UPS 电池耗尽之前彻底关闭系统。

我的 Linux 机器看起来不错,但我的 FreeBSD (12.1) 机器无法启动。它没有出现登录提示,而是直接将我带入一个无特权的 shell,甚至不允许我登录su

我已经检查了 tty 启动消息(尽我所能,因为它们会滚动)以及/var/log/messages,但唯一潜在的问题迹象是:

  • 愤怒的嘟嘟声(比 POST 嘟嘟声低且稍长)
  • 关于“MSI-X 表”的错误消息
  • /以只读方式安装

我手动运行fsck(在单用户模式下启动似乎工作正常,除非系统实际上不能像那样使用)是干净的。我正在存储阵列上运行 zpool scrap(操作系统位于 UFS 上,但这个盒子本质上是 NAS),但预计不会出现任何错误。除了一些打开的 sshfs 连接之外,系统在断电时不会执行任何操作。

其他注意事项:

  • 该系统最初安装为 FreeBSD 12.0,很可能升级后从未启动过。
  • 根 FS 已挂载并且“看起来”完好无损。 (阅读:我运行ls了几个目录,预期的文件似乎存在。
  • 我已经从 ports 安装了一些东西(主要是 GNU CLI 工具),但据我所知没有 km​​ods 或类似的东西。该系统是相当基本的预算AMD+APU。
  • 似乎所有物理按键都被记录在/var/log/messages?

可能出什么问题了?


编辑:嗯...我是有点一个白痴,尽管这仍然是 WTF?情况。然而,我现在不太确定机器自安装以来是否没有这样做过;现在我意识到发生了什么事,我想我以前见过这个,所以它可能与断电无关。 (我有没有提到它不会经常重新启动?)

我终于注意到我被扔进去的贝壳里有一些有趣的东西。你能发现它吗?这是启动后的最后几行:

Updating motd:.
Mounting late filesystems:.
Security policy loaded: MAC/ntpd (mac_ntpd)
Starting ntpd.
[ntpd@<redacted> /]$ █

...就是这样;没有登录,没有错误,没有网络,只有上面显示的完全削弱的命令提示符。

所以为什么它到底在做什么? (提示:^D“修复”了它,如果您注意到问题所在,您可能会想到这一点,但是为什么它会这样做吗?我希望我的系统无需手持即可启动!我怀疑这也意味着我有一个不工作的守护进程

答案1

有多种方法可以实现这一目标,但最简单的方法之一是破坏设置ntpd_flags/etc/rc.conf有效地对自身执行命令注入攻击。

这就是为什么rc基于 shell 脚本的系统很难正确运行。这是非常很难彻底地防御可能(意外)注入额外 shell 命令的所有方式,尤其是在printf缺少%q格式说明符时。

FreeBSD 的 Mewburnrc脚本几乎没有针对此类事故进行防御性编码。请注意,例如,如果文件名包含空格,则该ntpd_config文件名将不起作用。与某些引用相比,这是相当微不足道的引用。

是的,这不是紧急外壳。

答案2

啊,深奥的(也是我讨厌 BSD 的事情)。

FreeBSD 上的默认 shell 是 (t?)csh。我讨厌[t]csh。所以,我插入了一行.cshrc来执行 bash。

问题:现在任何“作为”root (nb su -m) 运行的 shell 都无法接受命令参数;它只会执行(交互式!)bash。

解决方案:改为执行 bash in .login(这显然是特定于 csh 的)。

相关内容