我有一个 ZyXEL NAS326 网络驱动器,它运行 BusyBox v1.19.4 以及一个附加的 OpenWrt 存储库。每次重新启动后,系统看不到 OpenWrt 二进制文件的路径,也不会记住命令历史记录。即使我运行命令. /opt/etc/profile
,然后重新启动后也没有命令历史记录,也没有 OpenWrt 二进制文件的路径。此 NAS 上的默认控制台是 ash。如何配置系统,使系统始终在控制台中有活动的命令历史记录,并可以访问路径中的 OpenWrt bianrium?
我有一个 ZyXEL NAS326 网络驱动器,它运行 BusyBox v1.19.4 以及一个附加的 OpenWrt 存储库。每次重新启动后,系统看不到 OpenWrt 二进制文件的路径,也不会记住命令历史记录。即使我运行命令. /opt/etc/profile
,然后重新启动后也没有命令历史记录,也没有 OpenWrt 二进制文件的路径。此 NAS 上的默认控制台是 ash。如何配置系统,使系统始终在控制台中有活动的命令历史记录,并可以访问路径中的 OpenWrt bianrium?
所以,首先,busybox/ash 是否保存历史记录是一个编译时选项;换句话说,如果在运行至少一个命令后主目录中没有
.ash_history
文件,那么您无能为力 – 您需要使用另一个实际上具有该功能的 shell。我想说,无论如何,这在您的用例中可能是明智的,因为:“我想要命令历史记录”只是说“我多次使用此 shell 来修复某些问题”,这意味着这实际上不是最佳的交互式 shellash
。它的目的是要轻薄,而不是完全替代您的桌面外壳!然后:
看到你的主目录不是持久的,没有地方可以实际存储 shell 历史记录!(它通常存储在 中
~/.ash_history
,但正如您所注意到的,它不会被写入永久存储,但可能保留在 RAM 覆盖层中,无法在重新启动后保存。)幸运的是,在大多数 shell 中,您可以使用
HISTFILE
环境来设置不同的位置。Busybox 没有记录这一点,但至少在其当前的代码版本中,它确实尊重该变量。但您的 NAS 上运行的是哪个版本以及哪些选项 – 没有人知道!(另一个迹象表明,在这样的系统上,您可能希望运行一个不太精简的 shell,例如 zsh)。你甚至不能持久地写入/etc,所以我会同意:你不能,直到你弄清楚如何做到这一点,这可能不是你能做的事情。(如果您始终知道根文件系统在重新启动后处于相同的出厂状态,那么它会使消费类设备的不可靠性大大降低,并且在暴露安全漏洞后持续获得未经授权的访问会更加困难。显然,NAS 不是应该是终端服务器!)
我不知道这个 openwrt 存储库是如何工作的,但我敢打赌它有自己的文档 - 并且很可能以这种方式安装的软件将查看 /opt/etc 而不是 /etc,所以如果你可以更改用户的 shell (使用
chsh
)通过 openwrt 安装在 /opt/bin 中的东西,也许你至少可以配置它。除此之外,您所能做的就是希望 SSH 服务器(或您用来登录的任何内容)允许您指定两个环境变量(例如,您
HISTFILE
指向用户可以访问的位置,并且在重新启动后保持不变)和你想要运行的命令 - 那么你可以做类似的事情在你的机器上确保 1.
zsh
使用了 openwrt 安装的“正确”shell,这肯定会保存历史记录,2. 它使用持久路径来存储其历史记录。您需要检查 Zyxel 如何构建其操作系统映像。您很可能可以做同样的事情,并进行所需的修改!
Marvell 演示(Marvell 是一家构建 SoC(中央处理器,您的 NAS 所基于的)的公司)表示,他们提供了完整的 OpenEmbedded/Yocto 树,允许集成商(例如 Zyxel)构建适合其具体用例的 Linux 发行版. Zyxel 不太可能使用它,修改必要的层,添加自己的软件并使用它来构建映像。现在,Zyxel 作为大众市场网络设备的大型供应商,对他们来说,安全事件变得非常昂贵,很可能(并且由于上述非常充分的理由)已经锁定了他们的 SecureBoot,只允许启动签名的固件。这可能根本不是您可以解决的问题 - 有适当的加密技术可以让硬件区分已修改的系统映像和未修改的系统映像。
因此,当您构建这样一个包含修改后的 /etc 的映像时,您很可能无法启动它,因为您无法对其进行签名。这一切都归结为合勤科技对其系统的锁定程度。
坦率地说,嗯,我不确定小型 NAS 设备上的根系统是我想要的 shell 历史记录吗?听起来您想弄清楚供应商的应用程序商店是否以及如何允许您安装容器或类似的隔离环境,以便您可以像在成熟的桌面上一样运行交互式 shell。但。坦率地说。它是一个 1.3 GHz 单核 ARMv7,只有 512 MB RAM(这对于存储设备来说非常小)。我确实希望 Zyxel 投入大量工作来优化通过 DMA 网络进行的存储访问,因为否则它就已经承担了在访问文件时兼顾良性网络速度的繁重任务,而且我不相信这是一个您会选择的平台。想要运行其他任何东西。
1 对于未来的嵌入式开发读者来说,编译自己的 busybox:编译时选项是
ENABLE_FEATURE_EDITING_SAVEHISTORY
.