我打算在未来几天购买一台新笔记本电脑,我对新的、酷炫的超极本印象深刻。作为 GNU/Linux 的长期用户,我当然会在其上安装我选择的发行版。
很有可能我必须购买一台预装了 Windows 8 的电脑;并且很有可能它会运行 UEFI 并具有“安全启动”,在该安全启动上未签名的内核将无法启动。
UEFI 可能不错,BIOS 可能需要退休。我猜毛茸茸的东西是Secure Boot。
据我所知,一些受信任的证书将嵌入到固件中,因此嵌入到内核等中。如果内核的证书可以追溯到固件中的任何一个,内核将启动,否则 UEFI 会告诉我关闭并拒绝启动。此过程将阻止未经认证的软件启动。这可能有好处,尽管我看不到它们。
我想知道开源内核如何获得这些密钥之一并且仍然是免费的。我已经阅读了 Linux 邮件列表上的一个线程,其中 Red hat 员工要求 Linus Torvalds 提取一个变更集,该变更集实现了解析 PE 二进制文件的工具并采取一组复杂的操作让内核在安全启动模式下启动(据我所知)。他们想这样做是因为微软只对 PE 二进制文件进行签名。Torvalds 先生善意地拒绝了这个变更集,指出内核已经实现了标准,而不是 PE。RedHat 正在尝试将此代码推送到内核,以便他们有一天不必分叉它。
看,这是一件复杂的事情。让我问我的问题:
这将如何影响开源和免费内核、爱好者/学术内核开发人员等。例如,这会引导吗(一个非常基本的引导扇区代码):
hang:
jmp hang
times 510-($-$$) db 0
db 0x55
db 0xAA
Run Code Online (Sandbox Code Playgroud)这个网站上的一条新闻是对这个问题的启发。一个名为 …
安装 Nvidia 驱动程序后,我被提升为设置 MOK 密码,否则第三方驱动程序可能无法正常工作,因此我创建了一个。重新启动后,我看到一个蓝色的 MOK 管理屏幕,其中有几个选项,第一个是继续启动。所以我选择了这个,当启动完成时,我的第二台显示器没有被识别。记得在最初提示 MOK 时阅读了有关安全启动的内容,我启动到 BIOS 并关闭了安全启动。现在我的第二个屏幕回来了。想到了几个问题。
谢谢你的帮助!
我有一台双启动笔记本电脑 Windows 10 / Linux mint 20。启用了安全启动以及硬盘加密,但后者对于这个问题可能并不重要。
顺便说一句,我的问题与此非常相似:https://forums.linuxmint.com/viewtopic.php ?t=274365
我安装了 Windows,然后安装了 Linux Mint。Mint 安装后,计算机重新启动,并要求我“继续启动”或“注册 MOK”。我不知道该怎么办,就用另一台笔记本电脑上网搜索。在搜索时,对话框显然超时了,计算机只是继续启动。笔记本电脑是已更新至最新 BIOS 的 Dell Vostro 5581。
同一天晚些时候,我从 Oracle 网站(而不是从存储库)安装了 Virtualbox。在控制台上以文本模式安装期间,它要求我确认是否要在下次重新启动时注册 MOK 并输入临时密码。我这样做了,重新启动并注册了 MOK。(顺便说一句,我不知道自己在做什么)
所以,这是我的问题。所有这些安全启动的事情对我来说都是非常新鲜的。
当您第一次安装 Mint 并重新启动时,出现的初始“继续启动”或“注册 MOK”对话框是什么?这甚至在操作系统启动之前就出现了。我认为这是BIOS的问题。如果您只是继续启动或注册密钥,似乎并不重要。我安装了 2 次 Linux,在第 1 次中我选择注册密钥,但在第 2 次中忽略了它。似乎没有什么区别。
如果我注册了 MOK 密钥,Virtualbox 是否会在不要求我执行任何操作的情况下进行安装?VirtualBox 注册自己的密钥时到底做了什么?
在安装并配置系统后,我现在不想再次重新安装,如何进行“注册 MOK”?论坛上的另一个问题(见上面的链接)有一个答案:
我有同样的问题。为了设置新的 MOK 密码,我使用了以下命令
sudo update-secureboot-policy --enroll-key
但是,在我的安装中没有这样的命令update-secureboot-policy
。
现在我不敢安装专有的 NVidia 驱动程序,因为我没有注册 MOK 并且担心它不起作用。
一般来说,第一次重新启动后,“注册 MOK”会做什么?我真的不明白。这是否意味着它将一些 Ubuntu 密钥放入 BIOS 中?这是否意味着如果我这样做,那么我将来安装的所有专有内核模块都将顺利进行,而无需注册自己的 MOK?
我正在使用带有 shim 和 grub2 的默认 ubuntu 方法,结合我自己的平台密钥(带有 sbsign 的自签名 shim)和加密的根分区,以安全启动我的 ubuntu 安装。但这仅验证 grubx64.efi 和内核,而不能保护未加密启动分区上的 initrd.img 和 grub.cfg 文件免受恶意修改。
那么如何在使用它们启动之前验证 initrd 和 grub 配置,可能使用 sha256 哈希?该验证可以在 shim、grub 或我可能使用的其他工具中进行,以补充或代替 shim 和/或 grub。
这个问题的目的是为了防止在修改后的环境(内核命令行和initrd)下执行内核,以防止将根分区加密密码泄露到任何地方。
尽管阅读了有关安全启动的网络教程/博客(包括 Ubuntu 和 Linux 基金会的 PreLoader.efi),但没有找到任何方法来验证启动配置,所有这些都解释了包括内核模块在内的可执行文件的验证如何工作,但没有其中提到了 grub.cfg 和(其中的 shell 脚本和配置文件)initrd,所以看起来我是第一个在启动过程中要求验证非二进制文件的人。我找到的最好的资源是Rod Smith 的资源。
我还没有尝试的是修改 shim 或 grub 的源代码,创建一个 fork,或者直接为它们做贡献。那会是唯一的出路吗?
就像 Windows 具有安全启动功能,可以防止任何外部操作系统加载程序代码在启动时运行,Linux 是否有类似的选项?我环顾四周,但是当我搜索时,我得到的唯一结果是如何在支持 UEFI 的 Windows 机器上安装 Linux。我找不到如何将这个选项带到我的 Linux 机器上。
我不确定是否有这方面的指南,但我想知道实现以下目标所涉及的详细步骤(也许是分步指南?):
我想要实现的主要目标是替换固件中存储的内置微软CA证书,以禁止执行微软签名的操作系统引导加载程序,并仍然使用UEFI的安全引导功能来引导F19。此链接似乎概述了一般概述,但我找不到任何详细的指南来执行此操作。
按照此处的说明进行操作:安全启动 - ArchWiki去年(2016 年)表现出色。但是,自 2017 年初以来创建的任何密钥都会被我的 Dell Optiplex 7440 的 UEFI 固件拒绝。
我什至可以将桌面上的日期设置为 2016 年 12 月 31 日并创建有效的平台密钥,但使用较晚日期创建的任何内容都无法通过以下方式上传到 BIOS 的自定义模式密钥管理部分:
更换钥匙时出错。请确保新密钥的签名列表和序列化标头格式正确。
使用与以前完全相同的命令,只是用于生成密钥的计算机上的日期发生了变化:
openssl req -newkey rsa:2048 -nodes -keyout PK.key -new -x509 -sha256 -days 3650 -subj "/CN=Platform Key/" -out PK.crt
cert-to-efi-sig-list -g $uuid PK.crt PK.esl
sign-efi-sig-list -k PK.key -c PK.crt -g $uuid PK PK.esl PK.auth
Run Code Online (Sandbox Code Playgroud)
任何想法都感激不尽。在富士通机器上,这也以同样的方式工作/失败。
我希望能够让我的另一台 Debian/KDE 机器休眠,因为它很实用,而且我想节省一些能源。
我无法休眠另一个当前禁用了交换文件和安全启动的文件。
这台机器运行 Debian10/KDE,启用了安全启动,目前没有交换文件,但有一个交换分区(比 RAM 大)。硬盘是完全加密的。我已经尝试了以下方法:
sudo s2disk
. 这将返回:s2disk: Could not open the snapshot device. Reason: Operation not permitted
Run Code Online (Sandbox Code Playgroud)
sudo hibernate
. 这将返回:hibernate:Warning: Tuxonice binary signature file not found.
UdevQt: unhandlet device action "unbind"
UdevQt: unhandled device action "unbind"
UdevQt: unhandlet device action "bind"
UdevQt: unhandled device action "bind"
Run Code Online (Sandbox Code Playgroud)
sudo pm-hibernate
. 这什么都不返回,什么也没有发生。sudo systemctl hibernate
。Failed to hibernate system via logind: Sleep …
Run Code Online (Sandbox Code Playgroud) 在我的 systemd 日志 (journalctl) 中,我经常看到此消息:
冬眠受到限制;参见 man kernel_lockdown.7
这似乎源于内核锁定功能,当您在启用安全启动的 UEFI 模式下启动时(仅?)处于活动状态。
据我了解,此功能旨在防止在用户空间运行的程序修改内核。
虽然到目前为止我确实明白这一点,但我只是没有明白一件事: 为什么内核锁定会禁用该功能?为什么它完全禁用休眠?
禁用此功能的休眠究竟是什么“不安全”?
似乎锁定的内核不希望我休眠我的设备。
Linux kernel v5.6.15
Fedora 32 Silverblue
在 Fedora Ask交叉发布。
启用 Debian 测试和 SecureBoot 后:
我需要签署 VirtualBox 模块,如命令的输出vboxconfig
所示:
vboxdrv.sh: Stopping VirtualBox services.
vboxdrv.sh: Starting VirtualBox services.
vboxdrv.sh: You must sign these kernel modules before using VirtualBox:
vboxdrv vboxnetflt vboxnetadp
See the documenatation for your Linux distribution..
vboxdrv.sh: Building VirtualBox kernel modules.
vboxdrv.sh: failed: modprobe vboxdrv failed. Please use 'dmesg' to find out why.
There were problems setting up VirtualBox. To re-start the set-up process, run
/sbin/vboxconfig
as root. If your system is using EFI Secure Boot you may …
Run Code Online (Sandbox Code Playgroud) 作为一个项目,用于我的 VM 工作区的便携式副本以及稍后用于恢复失效驱动器(我的主笔记本电脑是 2015 年型号,因此数据救援是需要关注的问题),我\xe2\x80\x99m 尝试创建一个 Kali Linux live USB 可在任何 x86 机器上启动。
\n我根据Kali 文档创建了 ISO,并使用 Etcher 对其进行了刷新,但不幸的是,它\xe2\x80\x99s 未签名以在安全启动下运行(这意味着我可以 \xe2\x80\x99t 将其弹出到任何计算机中并启动就像我想要的那样)。因此,我开始寻找一种方法来对其进行签名以进行安全启动,或者使其运行而无需禁用它,但我\xe2\x80\x99已经陷入了死胡同。
\n我\xe2\x80\x99尝试过的(在每次之前重新刷新,有时使用添加的包创建一个新映像):
\nbootia32.efi
或boota64.efi
中的一个EFI\\boot
,会出现相同的错误*.efi.signed
找到的三个文件,启动时给出 \xe2\x80\x98boot device failed\xe2\x80\x99,另外两个无法进行身份验证usr\\lib\\shim
shimia32.efi.signed
fbia32.efi
(如 \xe2\x80\x98follow bootloader\xe2\x80\x99,shim 调用的东西)和/或grubia32.efi
尝试让 shim\xe2\x80\x99s efi 找到并调用它们,仍然给出 \xe2\x80\x98boot device failed\xe2\x80\x99我\xe2\x80\x99d想尝试的:
\n我目前知道两种将 LUKS 加密根分区绑定到 TPM2 的最新方法:systemd-cryptenroll
和clevis
. 在成功检查密钥密封的 PCR 后,他们似乎都释放了加密密钥。
但我不喜欢在没有用户交互的情况下解密卷的想法。我宁愿有一个类似于 BitLocker for Windows 提供的解决方案:TPM 和额外的 PIN 或恢复密钥。
尽管我在网上进行了详尽的搜索,但我无法找到这方面的任何提示。有人知道解决方案吗?
编辑:有一个--recovery-key
选项systemd-cryptenroll
。我只关心如何在使用 TPM 时获得额外的 PIN 要求的问题。
我有一台带有三星 BIOS(版本 P08AFD)和 Aptio 设置实用程序的新笔记本电脑。当我尝试使用Arch Linux 2016.10.01启动 U 盘时,它说签名无效。该文档似乎假设我已经启动到 Arch Linux。所以我很难过如何继续:
USB 记忆棒可以在没有安全启动支持的旧机器上正常启动。
secure-boot ×13
uefi ×6
debian ×2
linux ×2
linux-kernel ×2
linux-mint ×2
arch-linux ×1
boot ×1
boot-loader ×1
dual-boot ×1
fedora ×1
hibernate ×1
kali-linux ×1
kde ×1
kernel ×1
live-usb ×1
luks ×1
nvidia ×1
security ×1
systemd ×1
tpm ×1
virtualbox ×1