linux – 如何从USB加载LUKS密码,回到键盘?

linux – 如何从USB加载LUKS密码,回到键盘?,第1张

概述我想通过全盘加密设置一个无头 Linux(Debian Wheezy)PC,可以使用USB驱动器解锁磁盘,也可以通过键盘输入密码.我的起点是使用Debian安装程序中的基本整体磁盘加密选项进行全新的安装,该安全程序管理除/ boot之外的所有内容,作为LUKS加密的逻辑卷组,并提供了键盘选项.我将在一个答案中描述我目前的解决方案,希望这将有助于其他人改进. 以下是我遇到的一些问题: >设置密码并将 我想通过全盘加密设置一个无头 Linux(Debian Wheezy)PC,可以使用USB驱动器解锁磁盘,也可以通过键盘输入密码.我的起点是使用Debian安装程序中的基本整体磁盘加密选项进行全新的安装,该安全程序管理除/ boot之外的所有内容,作为LUKS加密的逻辑卷组,并提供了键盘选项.我将在一个答案中描述我目前的解决方案,希望这将有助于其他人改进.

以下是我遇到的一些问题:

>设置密码并将其放在USB驱动器上.
>及时加载USB模块.
>等待USB驱动器被linux识别,然后再尝试读取它.
>识别正确的USB驱动器(不是其他正在插入的驱动器).
写一个“keyscript”来从USB驱动器上拉一个密码.
>确保在所有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&gt ;.
>编辑/ etc / crypttab.你应该看到一行如下:

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秒钟才能显示.这对我来说很有用,但我很想知道一个更好的方法.
>创建一个虚拟文件/ passphrase-from-usb -i尝试在第一次运行,以表明我们已经运行了至少一次.
>如果至少运行了一次,或者找不到USB驱动器,请运行cryptroot使用的askpass程序进行键盘输入.

最后的脚本:

#!/bin/shset -eif ! [ -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    fifi/lib/cryptsetup/askpass "Unlocking the disk $CRYPTTAB_SOURCE ($CRYPTTAB_name)\nEnter passphrase: "

最后,我们需要确保该脚本在initramfs中可用.创建/ etc / initramfs-tools / hooks / passphrase-from-usb包含:

#!/bin/shPREREQ=""prereqs() {        echo "$PREREQ"}case "" in        prereqs)                prereqs                exit 0        ;;esac. "${confdIR}/initramfs.conf". /usr/share/initramfs-tools/hook-functionscopy_exec /bin/passphrase-from-usb /bin

>我的initramfs中没有USB驱动程序. (在Debian的更新版本中,它们默认是默认的).我不得不通过添加到/ etc / initramfs-tools / modules来添加它们:

uhci_hcdehci_hcdusb_storage

>完成所有操作后,更新initramfs:

update-initramfs -u
总结

以上是内存溢出为你收集整理的linux – 如何从USB加载LUKS密码,回到键盘?全部内容,希望文章能够帮你解决linux – 如何从USB加载LUKS密码,回到键盘?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:http://outofmemory.cn/yw/1048742.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-25
下一篇2022-05-25

发表评论

登录后才能评论

评论列表(0条)

    保存