我有一个在 VPS 上运行的 Linux Arch 系统。 rootfs 安装在 LVM 分区上。我想在此分区上覆盖一个加密容器,然后在其上重新安装 rootfs 并通过 ssh 在启动时启用 ssh 解锁。我很高兴放弃现有 rootfs 的所有内容并从头开始创建一个新的。
我按如下方式进行:
- 在 /tmp/newroot 中创建一个新的临时 rootfs(我在拱门维基)
- chroot 并设置 pacman,安装一些定义授权密钥的东西,启用但不启动 sshd
- 退出回到原来的根目录
- 永久切换到新根:以下建议这篇很棒的文章,我运行下面的代码。
- 此时,我想重新启动 sshd 和所有其他仍挂在旧根上的服务,该根位于 lvm 分区上
- 在lvm分区上创建加密分区
- 在其上安装arch Linux并适当修改intrafms
步骤 6 和 7 有详细记录(例如这里)。
以下是步骤 4 的详细信息,效果很好:
# we start after step 2, so that /tmp/newroot contains a minimal temporary root fs
# with network, sshd and pacman, and the command prompt is from the original root
# move the new root fs to a newly create /tmproot, as per the referenced post
# (perhaps this is redundant, I could have used newroot directly, but it should not harm)
mkdir /tmp/tmproot
mount -t tmpfs none /tmp/tmproot
mv /tmp/newroot/* /tmp/tmproot
# switch to new root
mount -a
mount --make-rprivate / # necessary for pivot_root to work
pivot_root /tmp/tmproot /tmp/tmproot/oldroot
# move some directories to newroot
for i in dev proc sys run; do mount --move /oldroot/$i /$i; done
我被困在步骤 5 中。使用fuser -vm /oldroot
我可以看到有很多进程仍然挂在旧的根分区上。如果我尝试使用从 newroot 重新启动它们systemctl
,则会收到错误:
# systemctl restart sshd
Failed to restart sshd service: Failed to activate service 'org.freedesktop.systemd1': timed out
我可以手动杀死它们,但是我只剩下 init process systemd
,而且似乎没有办法杀死它。systemctl daemon-reexec
行不通的。
也许我忘记在文件系统中配置某些内容newroot
?也许我应该使用switch_root
而不是pivot_root
?
有什么建议吗?谢谢
答案1
看一眼https://wiki.archlinux.org/index.php/Dm-crypt/Specialties。您可以将 mkninitcpio 加密挂钩切换为 encryptssh,然后将一些内容添加到内核引导行中。我正在使用 dropbear 钩子,效果非常好。