带磁盘加密的无人值守/无头 Ubuntu 服务器 - 如何设置?

anr*_*eff 9 server encryption administration automation systemd

我是一名长期的 Linux 用户,但我不太熟悉新的开发,尤其是。关于 Ubuntu 和系统(d)管理。

\n

我有一台非常旧的 PC,我想将其用于文件服务器、Mercurial 存储库、FTP 和 WWW 服务器,以及我用 Django 制作的其他一些小型公司内部 Web 应用程序。 \n以前,这一切都运行在古老的 Fedora 上,未加密的磁盘,所有内容均从/etc/rc.local.

\n

我已经安装了新的硬盘,并安装了 Ubuntu 18.04 LTS。我现在正在恢复服务,但我也想改进。

\n

首先,我希望有价值的数据(Django 数据库、文件服务器中的文件……)位于加密分区上。然而,我在磁盘加密方面的经验是,在启动过程中会要求您输入密码。我想避免这种情况,因为服务器不会连接显示器或键盘。\n其次,我想以更正式的(“Ubuntian”)方式管理服务。

\n

目前的想法

\n
    \n
  • 将服务的数据存储在加密分区上,该分区未在 中列出/etc/fstab
  • \n
  • 重启后,服务器只有sshd,但服务不会启动,分区也不会挂载。
  • \n
  • 我将通过 ssh 连接到计算机,并运行一个脚本来安装分区(要求我提供密码)并启动服务。
  • \n
\n

该机器装有 UPS,我预计很少运行上述程序(一年几次)。

\n

问题

\n

目前的想法好不好?更好的方法来做到这一点?

\n

如果好的话,如何实现?\n我当然可以走“完全DIY的方式”,用luks命令、iptables命令打开端口、直接调用服务的守护进程编写一个巨大的脚本,但我想学习这里有一些新的东西,并以正确的 Ubuntu 方式进行\xe2\x84\xa2 :)

\n

欢迎任何指针或代码/脚本示例!

\n

Sim*_*ler 10

远程解锁加密分区

有一种简单且或多或少标准的方法可以在启动时解锁加密分区,而无需修改根分区。它需要dropbear,busyboxdropbear-initramfs.

$ sudo apt install dropbear busybox dropbear-initramfs
Run Code Online (Sandbox Code Playgroud)

将 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
Run Code Online (Sandbox Code Playgroud)

警告:某些旧dropbear版本不支持ed25519密钥。

使用 dropbear 键更新 initramfs

之后,需要更新初始 RAM 磁盘:

$ sudo update-initramfs -u
Run Code Online (Sandbox Code Playgroud)

就是这样,现在重新启动系统并等待对话框cryptsetup

远程解锁系统

重启后,系统将等待加密设备解锁。ssh使用 root 用户和相应的私钥登录。

# From a remote system
$ ssh -i ~/.ssh/my_private.id_rsa root@my.system.waiting.for.a.password.com
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.
Run Code Online (Sandbox Code Playgroud)

并且系统将以解锁的根设备启动。

Ubuntu 22.04 更新

由 Sjors Provoost 提出 - 这种方法在 Ubuntu 22.04 中停止工作。背后的原因是dropbear-initramfs. 在 20.04 中这个包是 a recommend,在 22.04 中它是 a suggest。因此,如果没有明确选择,将不会安装这些软件包。除此之外,dropbear按键的位置从更改/etc/dropbear-initramfs/etc/dropbear/initramfs--> 更新包含在答案中。