我是一个长期的 Linux 用户,但我不太熟悉新的发展,尤其是 Ubuntu 和系统管理。
我有一台非常旧的 PC,我想将其用作文件服务器、Mercurial 存储库、FTP 和 WWW 服务器,以及我用 Django 制作的一些其他小型公司内部 Web 应用程序。以前,所有这些都运行在古老的 Fedora 上,位于未加密的磁盘上,并且都是从 启动的/etc/rc.local
。
我装了一块新硬盘,上面安装了 Ubuntu 18.04 LTS。我现在要恢复服务,但我也想改进一下。
首先,我希望将有价值的数据(Django 数据库、文件服务器中的文件等)放在加密分区上。但是,根据我对磁盘加密的经验,启动时会要求您输入密码。我想避免这种情况,因为服务器不会连接显示器或键盘。其次,我想以更正式(“Ubuntian”)的方式管理服务。
目前的想法
- 将服务的数据放在加密分区上,该分区未在中列出
/etc/fstab
。 - 重启后,服务器将只有 sshd,但服务不会启动,分区也不会挂载。
- 我会通过 ssh 连接到该机器,并运行一个脚本,该脚本会挂载该分区(要求我输入密码),然后启动该服务。
该机器采用 UPS,我预计很少运行上述程序(每年几次)。
问题
当前的想法好吗?有没有更好的方法?
如果很好,如何实现它?我当然可以采用“完全 DIY 方式”,使用 luks 命令、iptables 命令编写一个大脚本来打开端口,并直接调用服务的守护进程,但我想在这里学习一些新东西,并以正确的 Ubuntu 方式™ 来实现它 :)
任何指针或者代码/脚本示例都将不胜感激!
答案1
远程解锁加密分区
有一种简单且基本标准的方法可以在启动时解锁加密分区,而无需修改根分区。它需要dropbear
、busybox
和dropbear-initramfs
。
$ sudo apt install dropbear busybox dropbear-initramfs
将 busybox 添加到 initramfs
要busybox
在初始 RAM 磁盘中启用,请BUSYBOX=y
在 中设置/etc/initramfs-tools/initramfs.conf
。dropbear SSH 主机密钥存储在/etc/dropbear-initramfs
或/etc/dropbear/initramfs
文件夹中(自 Ubuntu 22.04 起)。
将公钥添加到 dropbear 的 authorized_keys 中
初始 RAM 磁盘中没有用户管理,因此只有拥有公钥的 root 用户才能/etc/dropbear-initramfs/authorized_keys
通过 登录ssh
。您可以添加任何公钥,也可以简单地复制您的用户的一个公钥:
$ sudo cp ~/.ssh/authorized_keys /etc/dropbear-initramfs/authorized_keys
警告:某些旧dropbear
版本不支持ed25519
按键。
使用 dropbear 密钥更新 initramfs
此后,需要更新初始 RAM 磁盘:
$ sudo update-initramfs -u
就是这样,现在重新启动系统并等待cryptsetup
对话框。
远程解锁系统
重启后系统会等待加密设备的解锁,使用ssh
root用户和对应的私钥登录。
# From a remote system
$ ssh -i ~/.ssh/my_private.id_rsa [email protected]
Enter passphrase for key '~/.ssh/my_private.id_rsa':
BusyBox v1.30.1 (Ubuntu 1:1.30.1-4ubuntu6.1) built-in shell (ash)
Enter 'help' for a list of built-in commands.
#
# cryptroot-unlock
Please unlock disk ubuntu-root:
cryptsetup: ubuntu-root set up successfully
# Connection to my.system.waiting.for.a.password.com closed by remote host.
Connection to my.system.waiting.for.a.password.com closed.
系统将以解锁的根设备启动。
针对 Ubuntu 22.04 的更新
由 Sjors Provoost 提出 - 此方法在 Ubuntu 22.04 中停止工作。背后的原因是 的软件包依赖项发生了变化dropbear-initramfs
。在 20.04 中,此软件包是recommend
,在 22.04 中是suggest
。因此,如果没有明确选择,将无法安装软件包。除此之外,dropbear
键的位置从 更改/etc/dropbear-initramfs
为/etc/dropbear/initramfs
--> 包含在答案中的更新。