AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 599825
Accepted
seanlano
seanlano
Asked: 2015-03-23 03:13:45 +0800 CST2015-03-23 03:13:45 +0800 CST 2015-03-23 03:13:45 +0800 CST

Yubikey 双因素认证全盘加密通过 LUKS

  • 772

我最近买了一个 Yubikey Neo——一个漂亮的小型硬件第二因素身份验证设备。它主要用于一次性密码和新兴的 U2F 协议——但从 Yubikey 版本 2 开始,它还支持 HMAC-SHA1 质询-响应身份验证。HMAC-SHA1 结合了一个秘密密钥(存储在 Yubikey 中)并将其与密码短语结合以生成响应。

我如何将 Yubikey 与我的 Ubuntu FDE 设置结合起来,以将 2FA 与我的加密硬盘一起使用?

password
  • 4 4 个回答
  • 38254 Views

4 个回答

  • Voted
  1. Best Answer
    seanlano
    2015-03-23T03:13:45+08:002015-03-23T03:13:45+08:00

    一个名为PrivacyIdea的小组创建了一个小程序包,用于向 initramfs 添加HMAC-SHA1挑战-响应例程,这意味着 Ubuntu 可以向您查询要传递给 Yubikey 的挑战,然后使用响应来解锁 LUKS 卷。在大多数情况下,我遵循这些说明,并添加了一些评论。这个过程其实很容易做到。

    我已经在 Ubuntu 14.04、16.04 和 18.04 上测试过了;使用 Yubikey Neo。它应该适用于任何最新的 Yubikey,固件 2.0+,以及 14.04 之后的任何版本的 Ubuntu。我还使用 Yubikey 5C 测试了 Ubuntu 19.04,需要做一些额外的工作,但它可以正常工作。也可能有其他硬件 HMAC-SHA1 挑战-响应设备可以与之配合使用,但我不知道是否存在。与往常一样,确保您在继续之前备份了您的数据 - 这里应该没有任何问题,但是这总是有可能会破坏您计算机上的所有内容。这些说明不附带任何保证。

    更新:从 Ubuntu 16.04 开始,所需的包都在主存储库中,不需要 PPA。

    更新:自 Ubuntu 19.04 以来,主存储库中的软件在更新到cryptsetup. 有关如何解决该问题的详细信息,请参阅我的其他答案。

    如果您有任何问题,请添加评论!


    0.先决条件

    为此,您必须已经设置并运行 LUKS 全盘加密。您可以通过在安装 Ubuntu 时选择适当的选项来做到这一点。为了获得最大的安全性,您应该在安装期间选择一个非常强的密码。如果您的密码不正确,您应该在继续之前将其更改为更好的密码(此处有更详细的说明)。

    下面的方法不会替换任何现有的密码,而是将另一个密码添加到其中一个 LUKS 插槽中。因此,如果你丢失了你的 Yubikey,你仍然可以使用任何现有的密码来解锁你的计算机——我建议你记下它并将它藏在安全的地方——在此过程中你也会需要它几次。您的新 Yubikey 挑战密码应该仍然相当强大,但不必与您在安装 Ubuntu 时使用的密码一样长。


    1.添加PrivacyIdea PPA并安装包

    在 Ubuntu 14.04 上

    打开一个终端,然后运行以下命令:

    sudo add-apt-repository ppa:privacyidea/privacyidea 
    

    出现提示时按 Enter,然后运行:

    sudo apt-get update
    

    然后安装包:

    sudo apt-get install yubikey-luks
    

    在 Ubuntu 16.04、18.04 上

    不需要 PPA,你可以安装包:

    sudo apt-get install yubikey-luks
    

    在 Ubuntu 19.04 上

    有关如何从 Ubuntu 19.04 的源代码构建包的信息,请参阅此答案。yubikey-luks


    2.安装Yubikey软件

    如果您将 Yubikey 的 HMAC-SHA1 功能用于其他用途,则可以跳过本节。它会擦除第二个 Yubikey 插槽中的任何配置,因此如果您将 HMAC-SHA1 用于此 Yubikey 的其他目的,请不要执行此步骤。

    您需要通过从 Ubuntu 14.04 上的 Yubico PPA或 16.04 及更高版本上的主 Ubuntu 存储库安装所需的软件来设置 Yubikey 以与 Ubuntu 一起使用。

    在 Ubuntu 14.04 上

    如果您之前没有这样做,请添加 PPA 并使用以下命令安装软件包:

    sudo add-apt-repository ppa:yubico/stable
    sudo apt-get update
    sudo apt-get install yubikey-personalization
    

    在 Ubuntu 16.04、18.04(及更高版本)上

    sudo apt-get install yubikey-personalization
    

    3. 为 HMAC-SHA1 初始化 Yubikey Slot

    现在我们需要使用 HMAC-SHA1 配置对 Yubikey 的第二个插槽进行编程。这将清除您之前的插槽配置,默认情况下为空。同样,如果您将 HMAC-SHA1 用于其他用途,请不要发出此命令 - 它会清除您的配置。您可以安全地在 Yubikey 中使用与其他用途相同的密钥来设置此 LUKS。(比如用另一台电脑使用LUKS+Yubikey)。

    ykpersonalize -2 -ochal-resp -ochal-hmac -ohmac-lt64 -oserial-api-visible
    

    终端将显示有关所做更改的一些信息。您无需记下这一点,但它会显示 HMAC-SHA1 算法中 Yubikey 使用的密钥,用于在给定挑战时计算响应。


    4. 将 Yubikey 注册到 LUKS Slot

    现在我们将编辑 LUKS 配置以附加来自 Yubikey 的响应作为解密密钥之一。

    我们需要指定的分区取决于您是使用 BIOS 还是 UEFI 来引导您的机器。对于 BIOS,加密卷/dev/sda5默认位于 ,对于 UEFI,它位于/dev/sda3。您可以通过打开disks实用程序并确认分区的路径来检查这一点 - 它应该是sda3或sda5。注意:在带有 NVMe 磁盘的较新计算机上,路径类似于/dev/nvme0n1p3.

    在终端中运行:

    sudo yubikey-luks-enroll -d /dev/sda3 -s 7
    

    这将写入 LUKS 配置的插槽 7,按照安装程序中的提示进行操作(它们会根据您运行的版本略有不同)。

    然后你就大功告成了!您应该能够重新启动您的计算机,如果您的 Yubikey 已插入,那么您可以输入您的挑战密码并使用 Yubikey 作为第二个因素来解锁 LUKS 分区并启动系统。解密硬盘后,您可以删除 Yubikey。

    如果你丢失了你的 Yubikey,你仍然可以输入你原来的(希望很长)密码来解密硬盘,然后你可以再次按照这个过程来注册一个新的 Yubikey。


    更改加密质询密码

    以后更改密码非常简单,只需使用此命令重置密钥即可。重置密钥并非完全必要,但不会有任何坏处。请记住,这会破坏以前的密钥,如果您将 HMAC-SHA1 用于此 Yubikey 的其他用途,请不要这样做。(比如用另一台电脑使用LUKS+Yubikey)。

     ykpersonalize -2 -ochal-resp -ochal-hmac -ohmac-lt64 -oserial-api-visible
    

    然后,类似于上面的第 4 步,将新密码注册到 LUKS 密钥槽中,除了选择使用以下命令清除槽 7:

    sudo yubikey-luks-enroll -d /dev/sda3 -s 7 -c
    

    当出现提示时Enter any remaining passphrase,请使用您的备份密码 - 而不是 Yubikey 挑战密码。然后输入一个新的Yubikey 挑战密码,两次,最后你需要最后一次输入备份密码。

    现在您的旧 Yubikey 挑战密码已被删除,只有您的新密码才能解密硬盘。您之前的备份密码仍将保持不变。您可以通过步骤 0中的链接更改该密码。


    关于安全隐患的说明

    添加 Yubikey 将为您的系统增加一定程度的安全性 - 有人必须知道挑战密码并拥有您的 Yubikey 才能解锁您的硬盘(或找到您的初始密码,您现在将其用作备份) . 但是,如果攻击者知道您的挑战密码(例如,在您输入密码时通过“肩膀冲浪”)并且只能在短时间内访问您的 Yubikey,那么攻击者解密硬盘在技术上是可行的。使用challenge passphrase他们可以得到Yubikey的响应并存储,然后在没有Yubikey的情况下随时用它来解密硬盘。或者,如果攻击者或恶意软件知道您的密码并且能够在连接到您的 Yubikey 的机器上运行代码,他们也可以发出质询并存储响应。因此,在输入您的挑战密码时保持警惕仍然非常重要,并确保您始终将 Yubikey 放在安全的地方。您还应该只将它插入您信任的机器。如果您丢失了 Yubikey 并怀疑有人可能一直在使用它来尝试学习解密密钥,请再次执行步骤 2 和 3 以重置 Yubikey 中的密钥并选择一个新的挑战密码。请注意,如果对手设法学习了您的一个密码(来自 Yubikey 的 HMAC-SHA1 响应或您的备份),他们可以备份 LUKS 主密钥,然后使用它来解密您的硬盘驱动器,即使您以后更改密码。并确保您始终将 Yubikey 放在安全的地方。您还应该只将它插入您信任的机器。如果您丢失了 Yubikey 并怀疑有人可能一直在使用它来尝试学习解密密钥,请再次执行步骤 2 和 3 以重置 Yubikey 中的密钥并选择一个新的挑战密码。请注意,如果对手设法学习了您的一个密码(来自 Yubikey 的 HMAC-SHA1 响应或您的备份),他们可以备份 LUKS 主密钥,然后使用它来解密您的硬盘驱动器,即使您以后更改密码。并确保您始终将 Yubikey 放在安全的地方。您还应该只将它插入您信任的机器。如果您丢失了 Yubikey 并怀疑有人可能一直在使用它来尝试学习解密密钥,请再次执行步骤 2 和 3 以重置 Yubikey 中的密钥并选择一个新的挑战密码。请注意,如果对手设法学习了您的一个密码(来自 Yubikey 的 HMAC-SHA1 响应或您的备份),他们可以备份 LUKS 主密钥,然后使用它来解密您的硬盘驱动器,即使您以后更改密码。再次执行步骤 2 和 3 以重置 Yubikey 中的密钥并选择一个新的挑战密码。请注意,如果对手设法学习了您的一个密码(来自 Yubikey 的 HMAC-SHA1 响应或您的备份),他们可以备份 LUKS 主密钥,然后使用它来解密您的硬盘驱动器,即使您以后更改密码。再次执行步骤 2 和 3 以重置 Yubikey 中的密钥并选择一个新的挑战密码。请注意,如果对手设法学习了您的一个密码(来自 Yubikey 的 HMAC-SHA1 响应或您的备份),他们可以备份 LUKS 主密钥,然后使用它来解密您的硬盘驱动器,即使您以后更改密码。cryptsetup 的手册页对此进行了解释,请查看luksHeaderBackup部分。如果您怀疑发生了这种情况,那么您必须制作一个全新的 LUKS 卷来保护您的数据。

    • 40
  2. cojack
    2020-07-09T23:18:09+08:002020-07-09T23:18:09+08:00

    Ubuntu 20.04 更新:

    省略 1 和 2 步骤

    因为现在在 Ubuntu 20.04 repo 中所有的包都可用,所以只需安装 yubikey-luks 为:

    sudo apt install yubikey-luks
    

    步骤 3

    这里需要注意一件事,您可能希望向-ochal-btn-trig命令添加一个参数ykpersonalize。

    它有什么作用?它将等待 15 秒以等待 YubiKey 上的按钮按下(如果你在 yubikey 上有按钮,则为 ofc),up2u。

    步骤 5

    当您重新启动计算机时,您不会看到来自 的消息/etc/ykluks.cfg,为什么?因为不知何故,这个脚本不会修改一个/etc/crypttab.

    好的,所以现在我们必须修改一个/etc/crypttab, 来添加:keyscript=/usr/share/yubikey-luks/ykluks-keyscript,

    修改前的样子?

    cat /etc/crypttab  
    [partition] UUID=1b2c1618-dc62-4d32-ab30-ebc23cb28cea none luks,discard
    

    您的分区可以是任何东西,fe:,sda3_crypt即使您的系统处于打开状态,sdb也不要担心,忽略它。

    修改后的样子?

    cat /etc/crypttab  
    [partition] UUID=1b2c1618-dc62-4d32-ab30-ebc23cb28cea none luks,keyscript=/usr/share/yubikey-luks/ykluks-keyscript,discard
    

    只需添加带有keyscript的部分。

    非常重要:不要错过选项之间的逗号,因为你会搞砸配置。

    非常重要 v2:在下一步之前,验证 keyscript 路径,检查你是否有这个文件,如果没有,idk 抱歉。

    第 6 步:

    sudo update-initramfs -u

    学分

    知识分享自:https ://infosec-handbook.eu/blog/yubikey-luks/

    就是这样,不客气。

    • 8
  3. seanlano
    2019-07-18T03:26:20+08:002019-07-18T03:26:20+08:00

    Ubuntu 19.04 更新:

    似乎从 Ubuntu 19.04(也许是 18.10,我没有尝试那个版本)开始,cryptsetup已经发生了足以打破yubikey-luks过去工作方式的变化。来自上游存储库的这个提交似乎实现了一个修复,但原始存储库自 2018 年 10 月以来似乎没有更新。我发现这个 repo 的分支有修复,以及其他一些整理 -起来,并设法构建了一个适用于 19.04 的包。

    由于我找不到更新后的分支的现有版本,yubikey-luks开始工作的方法包括获取源代码并在本地构建 DEB 包,然后安装它。

    按照我之前的回答中的步骤进行操作,除了将步骤 1 替换为以下内容:


    1. 获取 yubikey-luks 源码,构建并安装包

    使用以下命令安装构建依赖项:

    sudo apt install dh-exec devscripts expect yubikey-personalization
    

    然后下载并解压缩源存档:

    mkdir ~/tmp
    cd ~/tmp
    wget -O yubikey-luks.zip https://github.com/thuandt/yubikey-luks/archive/master.zip
    unzip yubikey-luks.zip
    cd yubikey-luks-*
    

    构建包:

    make builddeb NO_SIGN=1
    

    然后安装它:

    sudo dpkg -i DEBUILD/yubikey-luks_*.deb
    

    然后继续执行我第一个答案中的其余步骤。

    希望在 19.10 之前yubikey-luks可以更新主要 Ubuntu 存档中的版本,这样就不需要手动构建了。

    作为奖励,新版本有一个配置文件,可以在/etc/ykluks.cfg. 启动时显示的消息可以在此文件中配置。

    • 1
  4. User366
    2020-11-17T02:55:07+08:002020-11-17T02:55:07+08:00

    即使您使用 2FA,有人仍然可以在您解锁卷后获得您的 LUKS 密钥,并在以后使用它来解锁。

    有两个项目(非 Ubuntu)使用 yubikey 并且每次用户登录时也会更改 LUKS 密钥。这样即使以前的密钥和/或密码以某种方式已知,也很难访问系统攻击者。这是为真正偏执的人准备的:)

    这些项目是:

    • https://github.com/flowolf/initramfs_ykfde/ (Gentoo)
    • https://github.com/dmitryd/kali-yubikey/(卡利)

    虽然它们不能直接用于 Ubuntu,但它们仍然可以进行调整。

    • 0

相关问题

  • 在登录屏幕上自动选择用户

  • 如何轻松加密文件?

  • 通过 SSH 禁用密码访问?

  • 如何更改确定有效用户密码的规则?[关闭]

  • 用户如何避免在启动时输入密码?[关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve