linux – 如何从USB加载LUKS密码,回到键盘?
我想通过全盘加密设置一个无头
Linux(Debian Wheezy)PC,可以使用USB驱动器解锁磁盘,也可以通过键盘输入密码.我的起点是使用Debian安装程序中的基本整体磁盘加密选项进行全新的安装,该安全程序管理除/ boot之外的所有内容,作为LUKS加密的逻辑卷组,并提供了键盘选项.我将在一个答案中描述我目前的解决方案,希望这将有助于其他人改进.
以下是我遇到的一些问题: >设置密码并将其放在USB驱动器上. 我将接受一个重大改进的答案,并提供提供贡献的upvote答案. 解决方法
很多我的解决方案来自于
Using A USB Key For The LUKS Passphrase的帖子.
>创建随机密码: dd if=/dev/urandom bs=1 count=256 > passphrase >插入USB驱动器. dmesg输出将显示设备名称;假设/ dev / sdd.找出它的大小: blockdev --getsize64 /dev/sdd >我决定在原始设备的末端安装密码,认为可能会偶然使用USB驱动器. dd if=passphrase of=/dev/sdd bs=1 seek=<size-256> >将密码添加到LUKS卷: cryptsetup luksAddKey /dev/sda5 passphrase 这并不影响安装人员现有的手工输入密码.密码文件可以删除: rm passphrase >找到一个独特的名称为U盘,所以我们可以确定它当时: ls -l /dev/disk/by-id | grep -w sdd 你应该看到一个符号链接.我将其称为/ dev / disk / by-id /< ID> ;. sdc5_crypt UUID=b9570e0f-3bd3-40b0-801f-ee20ac460207 none luks 修改为: sdc5_crypt UUID=b9570e0f-3bd3-40b0-801f-ee20ac460207 /dev/disk/by-id/<ID> luks,keyscript=/bin/passphrase-from-usb >上面提及的键盘需要从USB设备读取密码.但是,它需要做的更多.要了解如何使用它,请检查/usr/share / initramfs-tools / scripts / local-top / cryptroot,这是在引导时运行以解锁根设备的脚本.注意当一个keyscript设置,它只是运行,输出管道到luksOpen没有其他检查.没有办法发出错误(USB驱动器不存在)或回退到键盘输入.如果密码失败,则键盘会循环运行,直到一段时间;然而,我们没有被告知我们正在进行哪些迭代.此外,我们无法控制keyscript的运行时间,所以我们无法确定Linux已经识别了USB驱动器. 我用一些黑客解决了这个问题: >在USB驱动器上进行轮询,等待3秒钟才能显示.这对我来说很有用,但我很想知道一个更好的方法. 最后的脚本: #!/bin/sh set -e if ! [ -e /passphrase-from-usb-tried ]; then touch /passphrase-from-usb-tried if ! [ -e "$CRYPTTAB_KEY" ]; then echo "Waiting for USB stick to be recognized..." >&2 sleep 3 fi if [ -e "$CRYPTTAB_KEY" ]; then echo "Unlocking the disk $CRYPTTAB_SOURCE ($CRYPTTAB_NAME) from USB key" >&2 dd if="$CRYPTTAB_KEY" bs=1 skip=129498880 count=256 2>/dev/null exit else echo "Can't find $CRYPTTAB_KEY; USB stick not present?" >&2 fi fi /lib/cryptsetup/askpass "Unlocking the disk $CRYPTTAB_SOURCE ($CRYPTTAB_NAME)nEnter passphrase: " 最后,我们需要确保该脚本在initramfs中可用.创建/ etc / initramfs-tools / hooks / passphrase-from-usb包含: #!/bin/sh PREREQ="" prereqs() { echo "$PREREQ" } case "$1" in prereqs) prereqs exit 0 ;; esac . "${CONFDIR}/initramfs.conf" . /usr/share/initramfs-tools/hook-functions copy_exec /bin/passphrase-from-usb /bin >我的initramfs中没有USB驱动程序. (在Debian的更新版本中,它们默认是默认的).我不得不通过添加到/ etc / initramfs-tools / modules来添加它们: uhci_hcd ehci_hcd usb_storage >完成所有操作后,更新initramfs: update-initramfs -u (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |