我最近从 Windows 切换到 Kubuntu Linux,在 Windows 中我有一个单独的管理员用户和一个用于日常任务的默认用户。我编写了一个脚本,使通常无法以管理员身份登录,这样我就不会意外以管理员身份登录(主要是出于安全原因)。因此,要以管理员身份进行某些更改,我(或任何使用我电脑的人)必须在提示时提供管理员密码。我喜欢这种设置,因为它似乎比始终以管理员用户身份运行更安全。
在 Linux 上,默认情况下禁用以 root 身份登录,我完全理解原因。要以 root 身份进行更改,需要在命令前加上sudo
,并提供用户密码,而不是 root 密码(假设用户是 sudoers 的一部分)。我了解它的工作原理,以及用户可能使用什么sudo
。我的问题是,要求输入 root 密码而不是我的密码是一个好主意吗sudo
?我的意思是,在 Windows 中,我必须提供管理员密码才能以管理员身份进行更改,在 Linux 上做同样的事情是一个好主意吗?还是我应该保持原样?
我是唯一使用我的电脑的人,如果有必要的话,我不会向任何人透露我的凭据。
UPD :现在我完全明白了,这要感谢 David 的回答。基本上,用 Windows 术语来说,Linux 中的标准(默认创建)用户= Windows 中的管理员用户。好吧,有点像:标准 Linux 用户有权提升为 root,但他们不是root。它要求输入用户密码,因为用户有特权(我知道,令人难以置信,但直到现在我才明白)。Windows(至少是 10 和 11)也是如此:管理员用户无法做任何他们想做的事情,他们仍然会收到 UAC 提示,他们只是有权按“是”而不是输入密码。我已经重新输入这个编辑半个小时了,我不知道如何用更好的语言来解释它。混淆是因为我没有在脑子里正确地把这些点连接起来。sudo
不,这就是
su
(substitute user) 所做的。默认情况下,su
要求输入root
密码。如果您指定了其他用户,则会要求输入其他用户的密码。请参阅本答案后面给出的示例,了解指定其他用户的位置。好吧,如果你是标准用户,那么 root 密码和你的密码都不会被接受。如果你是管理员用户,并且你觉得这是一个问题,那么就不要以管理员身份登录。
在 Kubuntu 中,您需要提供管理员密码才能以管理员身份进行更改,并提供管理员密码才能以标准用户身份进行更改。Windows 基本上以相同的方式工作。
是的。您可以尝试进行一些自定义更改,但这应该是不必要的,因为 Kubuntu 已经像 Windows 一样设置了。
Linux 下的身份验证
该答案的其余部分是使用 Ubuntu 22.04.3 LTS 桌面 Linux 进行测试的。
在您的问题中,您陈述“...来自 Windows,在那里我有一个单独的管理员用户和一个用于日常任务的默认用户”。Linux 也是如此。您可以创建标准用户和管理员用户帐户。假设用户
rpj
是标准用户,用户dma
是管理员用户。为了
dma
成为用户,该用户将输入以下内容,其中将要求输入root
密码。dma
要以 身份执行单个命令,需要输入以下内容,其中会要求输入
root
的密码。dma
为了
rpj
成为用户,该用户将输入以下内容,其中会要求输入两次root
密码。dma
要执行单个命令,需要输入以下内容,其中会要求输入两次
root
密码。dma
对于标准用户执行的其他
rpj
需要身份验证的任务,dma
将要求输入管理员密码而不是标准用户的密码rpj
。例如,如果标准用户rpj
尝试添加新用户,dma
则会要求输入管理员密码,如下所示。首先,一般有三种常用的方法可以以另一个用户的身份执行某些操作:
sudo
问题中提到的、David Anderson 的回答su
中提到的、以及 Polkit。sudo
通常会要求您输入密码,并且可高度配置。流行的发行版会将第一个创建的用户添加到一个组(sudo
对于 Debian 系列、wheel
对于 Red Hat 系列等),并制定一条规则允许该组执行任何操作。这通常是使用户成为此类发行版的管理员的原因,而不必真正以 身份登录root
。su
它的可配置性要差得多。通常它由其 PAM 堆栈配置,而某些发行版可能具有仅允许特定组的规则。sudo
,使用相同的组来授予访问权限。但是,配置是完全独立的 - 只是默认情况下经常使用相同的组。如果您在 中为特定用户添加一些配置sudoers
,这对 Polkit 权限没有任何作用。还有其他选项,例如
doas
或run0
,但这些选项尚未被广泛使用,因此在本文中我将忽略它们。现在进行身份验证:
通常,
sudo
会要求输入密码,但可以配置为要求输入目标用户的密码(target_pw
),实际上通常是 root,因此需要输入 root 密码,或者即使您想以其他用户身份运行某些操作,也需要输入 root 密码(root_pw
)。虽然在某些情况下这些可能有意义,但在共享系统的一般情况下,我认为这是个糟糕的主意。不要这样做。要么:这会导致密码共享,从而大大增加泄露的风险,如果确实泄露,密码轮换也会变得复杂。您应该使用密码管理器,这可以缓解问题,但既然现状很好,为什么要增加复杂性,然后再缓解呢?
或者你必须让知道密码的人来输入密码,在这种情况下,他们可以
su
结合使用sudo
David Anderson 在一次性任务中的回答中所建议的方法。如果是针对您管理的单用户系统,并且您想为敏感操作输入另一个密码,当然可以。在这种情况下,基本上这主要是个人感受的问题。它真的会增加安全性吗?取决于您要防御什么,但对于普通用户来说,我认为它不会增加任何东西。
如果您的用户有权执行您要执行的任何操作,或者任何可以执行该操作的用户,Polkit 都会要求您输入密码。如果您的用户未获得授权,而其他多个用户已获得授权,那么它会要求您选择要以哪个用户的身份进行身份验证,并提示您输入该用户的凭据。因此,Polkit 提供了两全其美的解决方案:您可以验证您的用户是否可以执行的操作,而对于其他用户需要验证的操作,他们可以输入密码。无论哪种情况,都无需共享密码。
请注意,Polkit 有一个命令行工具,,
pkexec
可以用来以 root 或其他用户身份运行命令。因此,您可以完全忽略
sudo
和su
,只使用 Polkit。当然,实际上,第三方工具可能只支持sudo
,所以您别无选择,但如果您可以控制正在使用的内容,那么只使用 Polkit 是一个选择。欢迎使用 Linux。正如您所注意到的,Linux 的权限处理方式与 Windows 不同。在本次讨论中,我们将 Windows 管理员帐户视为与 Linux 根帐户类似。这并不完全准确(请保持警惕,我那些有安全意识的朋友们!)但对于本次讨论来说,这应该足够了。
就我个人而言,我不喜欢 Windows 管理权限的方式。您必须以管理员身份打开整个应用程序(如 PowerShell 终端)才能以管理员身份运行命令。如果您让该应用程序保持打开状态,则任何后续操作都将以管理员身份执行。
在 Linux 中,我们将世界分为使用 sudo 和不使用 sudo 的两类。每种方式都有优点和缺点,但我更喜欢 sudo。我认为对大多数人来说都是如此。运行 sudo 就像说“对于这里的一个命令,我想要提升权限”。每当您使用 sudo 启动命令管道时,都要谨慎:您正在提升权限(以 root 身份运行)。
没有标准用户可以成功运行 sudo。事实上,聪明的管理员可以精心设计 sudo,使其适合特定用户,这样用户只能提升一个命令的权限。
当然,我建议为授予任何计算机访问权限的每个人设置唯一的密码/帐户。每个用户都有自己的密码,而您(作为管理员)将决定特定用户是否可以使用 sudo 以及出于何种目的使用 sudo。(Kubuntu 上的 GUI 应该允许您为您创建的每个用户帐户选择标准或管理员;更详细的更改将需要终端操作。)
这种类型的个人提升还允许记录谁做了什么,这是任何共享凭证都会混淆的事情。
因此,直接回答您的问题... sudo 应该始终询问当前用户的密码(在具有 sudo 的系统上,该密码永远不应该是 root 用户)。
这应该可以补充 David 在他非常详细的回复中所说的内容,并解决您的更新问题。