AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 760121
Accepted
tgs
tgs
Asked: 2023-10-29 18:25:56 +0800 CST2023-10-29 18:25:56 +0800 CST 2023-10-29 18:25:56 +0800 CST

重启后加载 /opt/etc/profile 文件的内容

  • 772

我有一个 ZyXEL NAS326 网络驱动器,它运行 BusyBox v1.19.4 以及一个附加的 OpenWrt 存储库。每次重新启动后,系统看不到 OpenWrt 二进制文件的路径,也不会记住命令历史记录。即使我运行命令. /opt/etc/profile,然后重新启动后也没有命令历史记录,也没有 OpenWrt 二进制文件的路径。此 NAS 上的默认控制台是 ash。如何配置系统,使系统始终在控制台中有活动的命令历史记录,并可以访问路径中的 OpenWrt bianrium?

busybox
  • 1 1 个回答
  • 15 Views

1 个回答

  • Voted
  1. Best Answer
    Marcus Müller
    2023-10-29T19:48:36+08:002023-10-29T19:48:36+08:00

    所以,首先,busybox/ash 是否保存历史记录是一个编译时选项;换句话说,如果在运行至少一个命令后主目录中没有.ash_history文件,那么您无能为力 – 您需要使用另一个实际上具有该功能的 shell。我想说,无论如何,这在您的用例中可能是明智的,因为:“我想要命令历史记录”只是说“我多次使用此 shell 来修复某些问题”,这意味着这实际上不是最佳的交互式 shell ash。它的目的是要轻薄,而不是完全替代您的桌面外壳!

    然后:

    我使用命令创建了 /home/test.txt 文件touch /home/test.txt,并在其中输入了内容 12345。重启后文件消失

    看到你的主目录不是持久的,没有地方可以实际存储 shell 历史记录!(它通常存储在 中~/.ash_history,但正如您所注意到的,它不会被写入永久存储,但可能保留在 RAM 覆盖层中,无法在重新启动后保存。)

    幸运的是,在大多数 shell 中,您可以使用HISTFILE环境来设置不同的位置。Busybox 没有记录这一点,但至少在其当前的代码版本中,它确实尊重该变量。但您的 NAS 上运行的是哪个版本以及哪些选项 – 没有人知道!(另一个迹象表明,在这样的系统上,您可能希望运行一个不太精简的 shell,例如 zsh)。

    如何配置系统,使系统始终在控制台中有活动的命令历史记录,并可以访问路径中的 OpenWrt bianrium?

    你甚至不能持久地写入/etc,所以我会同意:你不能,直到你弄清楚如何做到这一点,这可能不是你能做的事情。(如果您始终知道根文件系统在重新启动后处于相同的出厂状态,那么它会使消费类设备的不可靠性大大降低,并且在暴露安全漏洞后持续获得未经授权的访问会更加困难。显然,NAS 不是应该是终端服务器!)

    我不知道这个 openwrt 存储库是如何工作的,但我敢打赌它有自己的文档 - 并且很可能以这种方式安装的软件将查看 /opt/etc 而不是 /etc,所以如果你可以更改用户的 shell (使用chsh)通过 openwrt 安装在 /opt/bin 中的东西,也许你至少可以配置它。

    除此之外,您所能做的就是希望 SSH 服务器(或您用来登录的任何内容)允许您指定两个环境变量(例如,您HISTFILE指向用户可以访问的位置,并且在重新启动后保持不变)和你想要运行的命令 - 那么你可以做类似的事情

    env 'HISTFILE=/path/to/persistent/storage/on/NAS/.zsh_history' \
        ssh \
          -o SendEnv=HISTFILE \
          -t \
          youruser@NAS_hostname_or_IP_address \
          /path/to/openwrt-installed/zsh/on/NAS/zsh
    

    在你的机器上确保 1.zsh使用了 openwrt 安装的“正确”shell,这肯定会保存历史记录,2. 它使用持久路径来存储其历史记录。


    问题是:/etc/profile文件模板从哪里来?最初,PATH 部分中有一个条目PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:${BASE_PATH}/sbin:/usr/local/zy-pkgs/bin:${BASE_PATH}/htp,修改后如下所示:PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:${BASE_PATH}/sbin:/usr/local/zy-pkgs/bin:${BASE_PATH}/htp:/opt/bin重新启动后,一切都恢复到原来的状态

    您需要检查 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.

    • 0

相关问题

  • Busybox 的包管理器

  • 从哪个版本开始使用 ASH_BASH_COMPAT 构建的busybox ash 包含数组支持?

  • 如何使 mkinitcpio busybox ash 源 /etc/profile?

  • 使用“cat”克隆块设备

  • busysbox 重启在初始化脚本中不起作用

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve