禁用安全启动是否安全?

我只是想知道,我是否可以放心地禁用安全引导以安装最新的Nvidia显卡驱动程序。
我在一台Acer Aspire V Nitro上同时运行Windows 10和Ubuntu 16.04。它们分别位于同一硬盘上的不同分区中。

1可能是什么是安全启动?我应该禁用它吗?的重复问题。 - TheWanderer
3个回答

安全启动要求Windows和Ubuntu都需要所有系统级驱动程序都"签名",以证明它们是经过认证的正版软件。这个想法相当不错,在Windows上,微软为大多数驱动程序提供签名。
然而,在Ubuntu上,用户可能需要特殊的无线网卡驱动程序、显卡驱动程序或特殊硬件驱动程序。这些驱动程序通常没有经过签名,因为它们可能来自多个不同的来源。如果启用了安全启动,并且这些驱动程序没有经过签名,则这些驱动程序将无法加载。为了加载它们,每个驱动程序都必须经过"签名"。对驱动程序进行签名的过程并不是非常困难,但可能会很麻烦...尤其是当您更改/更新驱动程序或更改/更新作为Ubuntu一部分的内核软件时。每次更改都需要重新签署驱动程序。
所以,请想象一下...您的系统运行良好...您已经启用了安全启动...您的驱动程序都经过了正确的签名...您使用Ubuntu的软件更新程序安装了一个新的内核...或者您安装了一个新的驱动程序...然后重新启动系统,结果发现您的无线网卡可能无法工作,您的显卡无法正确显示,或者您的特殊硬件不再工作。现在您必须重新编译并重新签署所有模块。这并不好玩。
在我的系统上,我使用了5个自定义的DKMS驱动模块,在每次Ubuntu内核更新后都需要重新签名。哎呀。
简而言之...禁用安全启动,然后开心地使用吧。Windows不会介意,而且Ubuntu在软件更新和驱动安装方面会减少你的工作量。

谢谢你的建议!我确实在一些地方看到,有些人在禁用安全启动后无法重新启动Windows!这个说法有多大程度上是真实的?此外,通过禁用安全启动,我的电脑感染病毒的可能性有多大? - VihanAgarwal
1我曾经使用过禁用安全启动的Windows 8、8.1和10,没有遇到任何困难。我无法对其他人的经验发表意见。病毒?如果你有一个好的病毒防护程序,并且不点击试图安装恶意软件的电子邮件或网页链接,那么你可能是安全的。这只是我的个人观点。 - heynnema
2谢谢。故事的寓意是:只需禁用安全启动。我正在新系统上安装Ubuntu 20.04,安装过程中看到了有关安全启动的内容,让我感到困惑,于是我上网搜索,找到了这个问答。现在重新启动到BIOS/UEFI设置,禁用安全启动后再进行安装。听起来这样做将能省去我很多麻烦。谢谢。 - Gabriel Staples

是的,不是,或许如此。这个问题实际上非常主观,并不是关于Ubuntu的。尽管如此,我将尽力以公正的方式回答,以避免引发争论,并让您自行做出决定。
Secure Boot是Windows 8+笔记本电脑中的一项功能,只有微软签名的操作系统才能启动。这有点像苹果只允许安装官方签名的应用程序和固件到iDevice上。通常可以关闭这个功能,但并不总是这样做,这可能会导致Linux出现问题。
Secure Boot的目的是防止恶意软件如根套件和其他恶意软件劫持引导过程。这就是您需要考虑是否应该保持Secure Boot的原因。如果您经常访问一些可疑的网站,而没有使用AdBlocker或Privacy Badger之类的工具,那么您可能需要考虑保持其开启状态,或者如zwets建议的那样,自己签署NVIDIA模块。当然,如果您的浏览习惯正常且安全,那么通常可以关闭Secure Boot。
它还取决于你的偏执程度。如果你是那种因为互联网不安全而宁愿没有网络的人,那么你应该保持安全启动功能的开启状态。如果你像我这样,在多个站点使用相同的密码,那么就关闭它吧。
安全启动功能并没有太多特别之处(老实说,一个rootkit绕过它似乎并不是很困难),但它确实取决于你对安全的感觉。

这真的很有帮助!我虽然有广告拦截软件,但我访问了很多充斥着广告弹窗和恶意软件的网站,所以宁愿签署我的软件包。话虽如此,我查看了你发布的链接,但没有具体指示。能否请你稍微指导一下我如何对模块进行签署? - VihanAgarwal

关于是否关闭安全启动取决于您的安全需求。然而,与其关闭安全启动,您也可以对内核模块进行签名。
以下是如何执行此操作的简明说明:https://askubuntu.com/a/768310/134479

谢谢提醒。然而,在我的linux-headers/script目录中找不到sign-file文件,apt-file search sign-file只返回了4.4.0-28内核版本的结果。我找到了一个.c文件,我猜我需要编译它,但是我尝试使用sudo make --directory=/usr/src/linux-headers-4.4.0-45/scripts/ sign-file时太笨拙了(而且可能因为sudo make而显得很丑陋)。如何使用当前的软件包构建sign-file工具,并且OP(他在另一条评论中提问)如何签署Nvidia驱动程序?请注意,在gorka.eguileor.com上发布了一篇更新的帖子。 - LiveWireBT
1@LiveWireBT 这个问题让我感到困惑!在/usr/src/linux-headers-4.4.0-45/scripts中,我也没有找到sign-file文件,但是我使用的脚本却能正常工作。真是奇怪!魔鬼就在细节之中:脚本实际上位于/usr/src/linux-headers-4.4.0-45-generic/scripts目录下。也就是说,要对/lib/modules/$KVER/updates/dkms中的模块进行签名,请使用/usr/src/linux-headers-$KVER/scripts/sign-file - zwets