我正在使用 Buildroot 创建一个嵌入式系统。目前,我的 Buildroot 配置可确保 rootfs 在启动期间重新挂载为读/写。但是我想删除此功能并将我的 rootfs 保留为只读。
对此我有几个问题:
如何更改用户的密码?这需要更改 /etc/passwd 和 /etc/shadow。
如何更改时区?这需要更改 /etc/localtime。
如何为 sshd 创建 ssh 密钥? ssh-keygen 在 /etc/ssh/ 中创建密钥
根据文件系统层次结构标准,Linux 系统需要使用只读 /etc/ 目录来运行,但我似乎发现了如上所述的明显功能损失。
其次,在我的 Buildroot 配置中指定 rootfs 保持只读后,它选择将 /var/ 挂载为 tmpfs(在 RAM 中,因此是可写的)
但是,这是不稳定的,如何确保运行时文件(我需要保存)不会在重新启动或意外断电时丢失?
我在我的嵌入式系统中使用 UBIFS。我是否需要创建一个读/写 UBI 卷来用作持久存储?这是嵌入式系统的标准吗?
最后,我是否应该重新评估我的想法以使用只读 rootfs?鉴于我正在使用 UBI,并且由于磨损均衡是在所有 UBI 卷上实现的(当然,它们存在于同一设备上),因此将我的 rootfs 设为只读会带来什么好处吗?
答案1
将文件系统保持为只读安装可确保不会以意外方式修改任何内容。
为了允许某些操作,需要使用特定的文件系统分区: - 系统分区:只读 - 用户分区:可写
丢失用户分区可能只会将嵌入式设备恢复到默认状态,但可能不会导致设备永久无法访问。
允许某些操作 i. E.更改密码,需要将特定文件符号链接到用户分区。 - /etc/passwd -> /mnt/user/passwd - /etc/ssh -> /mnt/user/ssh - /etc/localtime -> /mnt/user/localtime
为了使密码访问更加可靠,最好将 passwd 重定向到 tmpfs,然后在启动期间从用户分区获取密码。
该方法可能会导致有关时区的问题。如果双重链接导致错误,可能需要修补 tzdata 以直接使用 /mnt/user/localtime: /etc/localtime -> /mnt/user/localtime -> /usr/share/zoneinfo ...