当前位置: 首页>>技术教程>>正文


encryption – 如何配置 LVM & LUKS 自动解密分区?

, ,

问题描述

我最近安装了具有完整 lvm 加密的 ubuntu server 11.04(从安装程序安装)。我现在希望使用密钥文件来自动解锁。我已尝试遵循本指南 http://ubuntuforums.org/showthread.php?t=837416

我用这个命令生成了一个密钥:sudo dd if=/dev/urandom of=/boot/grub/keyfile bs=1024 count=4

我把它放在 /boot/grub 因为我认为它没有加密。当我尝试使用此命令添加密钥时 sudo cryptsetup luksAddKey /dev/sdX /boot/grub/keyfile\nit 要求我输入密码,当我输入它时没有任何反应,屏幕上没有打印任何内容!我忽略它并继续其他步骤并重新启动但没有任何反应并且它要求输入密码。

谢谢您的帮助 。

最佳回答

我刚刚在我的新家庭服务器上经历过这个,它需要大量的谷歌搜索和猜测,但我已经开始工作了。我将尝试在此处重现这些步骤。我正在使用 Ubuntu Server 11.10,并开始使用加密的 LVM 进行非常标准的安装,所以我将只关联我从那里所做的更改。

设置:

  • /dev/sda1 是我未加密的 /boot 分区

  • /dev/sda5 是我的 lvm 分区,它包含其他一切——root、swap 和 home

  • /dev/sdc1 是我的 USB 闪存驱动器上的分区,我将在其中存储密钥文件

首先,我在我的主目录中创建了一个密钥文件:

dd if=/dev/urandom of=keyfile bs=512 count=4

(您可以使用更大的块大小或计算更大的密钥)

告诉 cryptsetup 新密钥(重要的是内容,而不是文件名):

sudo cryptsetup luksAddKey /dev/sda5 keyfile

然后,我用 ext2 格式化了我的 U 盘,并给它贴上了标签。我用了一个标签,这样以后我就可以通过标签挂载,万一出现问题就可以更换U盘了。

sudo mkfs -t ext2 /dev/sdc1
sudo e2label /dev/sdc1 KEYS

(当然,你的设备会有所不同)

现在,将密钥文件复制到 root 模式 400 拥有的 USB 闪存驱动器:

mkdir KEYS
sudo mount /dev/sdc1 KEYS
sudo cp keyfile KEYS
sudo chown root KEYS/keyfile
sudo chmod 400 KEYS/keyfile

修改 /etc/crypttab.我原来包含

sd5_crypt UUID=(...) none luks

我改为

sd5_crypt UUID=(...) /dev/disk/by-label/KEYS:/keyfile luks,keyscript=/lib/cryptsetup/scripts/passdev

最后,更新 initramfs:

sudo update-initramfs -uv

它现在使用 USB 闪存驱动器上的密钥文件启动。如果我移除闪存驱动器(比如,当我去度假时),它不会启动,我的数据是安全的。

如果有人知道如何在 USB 闪存驱动器丢失的情况下要求输入密码,那么作为后备会很方便。希望这对您有所帮助,欢迎任何补充或更正!

次佳回答

改进 Randy Orrison’s answer ,这是我创建的一个小脚本,如果找不到密钥文件,系统将回退到询问用户密码。

#!/bin/sh

ask_for_password () {
    cryptkey="Unlocking the disk $cryptsource ($crypttarget)\nEnter passphrase: "
    if [ -x /bin/plymouth ] && plymouth --ping; then
        cryptkeyscript="plymouth ask-for-password --prompt"
        cryptkey=$(printf "$cryptkey")
    else
        cryptkeyscript="/lib/cryptsetup/askpass"
    fi
    $cryptkeyscript "$cryptkey"
}

device=$(echo $1 | cut -d: -f1)
filepath=$(echo $1 | cut -d: -f2)

# Ask for password if device doesn't exist
if [ ! -b $device ]; then
    ask_for_password
    exit
fi

mkdir /tmp/auto_unlocker
mount $device /tmp/auto_unlocker

# Again ask for password if device exist but file doesn't exist
if [ ! -e /tmp/auto_unlocker$filepath ]; then
    ask_for_password
else
    cat /tmp/auto_unlocker$filepath
fi

umount /tmp/auto_unlocker

保存它并将 /etc/crypttab 中的 keyscript=/lib/cryptsetup/scripts/passdev 替换为该文件的路径,然后运行 ​​sudo update-initramfs -uv 即可完成。

第三种回答

这些来自 howtoforge.com 的说明让我启动并运行了一个自动解密卷。

如何:使用密钥文件自动解锁 LUKS 加密驱动器

第 1 步:创建随机密钥文件

sudo dd if=/dev/urandom of=/root/keyfile bs=1024 count=4

第 2 步:使密钥文件对 root 只读

sudo chmod 0400 /root/keyfile

这将使密钥文件只能由 root 读取。如果有人可以访问此密钥文件,那么无论如何您的计算机都会遇到更大的问题。

或者将您想要的密钥文件 chown 到 root:root 并将其移动到 /root 文件夹中

第 3 步:将密钥文件添加到 LUKS

启用 LUKS/dm_crypt 的设备最多可以保存 10 个不同的密钥文件/密码。因此,除了已经设置的密码之外,我们将添加此密钥文件作为额外的授权方法。

sudo cryptsetup luksAddKey /dev/sdX /root/keyfile

sdX 当然是您的 LUKS 设备。

首先,系统会提示您输入(现有)密码以解锁驱动器。如果一切正常,你应该得到这样的输出:

Enter any LUKS passphrase:
key slot 0 unlocked.
Command successful.

第 4 步:创建映射器

LUKS 设备需要创建一个映射器,然后可以在 fstab 中引用该映射器。打开 /etc/crypttab

sudo nano /etc/crypttab

然后添加这样一行:

sdX_crypt      /dev/sdX  /root/keyfile  luks

或者您可以使用设备的 UUID:

sdX_crypt      /dev/disk/by-uuid/247ad289-dbe5-4419-9965-e3cd30f0b080  /root/keyfile  luks

sdX_crypt 是正在创建的映射器的名称。您可以在这里使用任何名称,例如”music” 或 “movies” 或 “sfdsfawe” ….

通过发出 ctrl-x 保存并关闭文件,回车,回车。 Ctrl-x 关闭 nano 但首先它要求保存文件 [yes = enter] 以及名称 [same name = enter]。

我们在那里所做的实际上是告诉应该使用 /root/keyfile 而不是密码输入来解锁驱动器。

第 5 步:在 fstab 中挂载设备

现在,我们有一个解锁的设备(好吧,还没有,但是当系统启动时)我们现在只需要挂载它。打开 /etc/fstab:

sudo nano /etc/fstab

并添加一个新条目,例如:

/dev/mapper/sdX_crypt  /media/sdX     ext3    defaults        0       2

确保您具有在步骤 4 中添加的正确映射器名称。还要确保安装点/文件夹存在。添加后,再次保存文件并关闭它(ctrl-x,回车,回车)。

第 6 步:重启或重新挂载

就是这样。现在您可以重新启动,附加设备应该是 auto-unlocked 并已安装。您还可以通过重新安装所有设备来测试它:

sudo mount -a

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/13393.html,未经允许,请勿转载。