当我尝试在 ubuntu 中执行某些操作时,系统会要求我使用 root 用户进行身份验证,但 ubuntu 不会为我提供哪个 root 用户的选项,它只是将其指定为设置我的机器的用户。我想知道如何更改它选择运行身份验证的用户?
例如,如果我想从 Ubuntu 软件中心安装软件,我会被要求通过用户 X 进行身份验证,而我想将其全局更改为用户 Y。
我也知道我可以从命令行使用 sudo 运行程序,但我不想这样做。
我正在使用 ubuntu 14.04。并且用户 Y 在 sudoers 文件中,而截至目前用户 X 不在。
答案1
一段时间以来,sudoers
它并不是在 Ubuntu 和其他 Linux 发行版上控制用户权限的唯一方法。波尔基特允许更细粒度的权限控制。当您在较新版本的 Ubuntu 上使用 GParted 或 Synaptic 时,身份验证通常使用 polkit 进行。
要将用户(例如Y
)设置为 polkit 的管理员,请在/etc/polkit-1/localauthority.conf.d/
(例如99-custom.conf
)中创建一个文件,其中包含:
[Configuration]
AdminIdentities=unix-user:Y
pkexec
您可以使用以下方式测试其是否正确应用Y
:
$ pkexec bash -l
==== AUTHENTICATING FOR org.freedesktop.policykit.exec ===
Authentication is needed to run `/bin/bash' as the super user
Authenticating as: muru,,, (muru)
Password:
==== AUTHENTICATION COMPLETE ===
由于您已经拥有管理员用户,因此您可以选择pkexec
:
$ pkexec bash
==== AUTHENTICATING FOR org.freedesktop.policykit.exec ===
Authentication is needed to run `/bin/bash' as the super user
Multiple identities can be used for authentication:
1. X,,, (Y)
2. Y,,, (X)
Choose identity to authenticate as (1-2):
GUI 应该提供一个下拉列表。
答案2
TL;DR:将用户添加到 sudo 组可以解决这个问题,因为sudo usermod -aG sudo username
两个都sudo 和 Polkit 使用该组。
在 Ubuntu 系统上赋予用户管理权力的通常和预期方式是将用户的帐户添加到sudo
组。这不仅赋予他们通过 sudo 的权力,还赋予他们通过 Polkit 的权力。允许您在具有管理权限的用户之间进行选择的图形提示是 Polkit 提示,而不是 sudo 提示。穆鲁说,大多数提示您输入密码才能执行管理任务的图形程序都使用 Polkit,不是sudo。
但是要让用户成为管理员,允许他们使用 sudo 和 Polkit 以 root 身份执行操作,这样他们就会出现在使用 Polkit 时要进行身份验证的用户列表中,你做不是需要单独配置 sudo 和 Polkit我不建议这样做。只需将用户放入sudo
组中即可。不要被名称所欺骗 - Polkit 尊重该组,就像 sudo 一样。
您的问题的措辞非常强烈地表明,您没有将用户添加到 Polkit 组,而是为该特定用户添加了自定义条目/etc/sudoers
:
...它只是将其指定为设置我的机器的用户。
安装 Ubuntu 时创建的用户被添加到该sudo
组中。
您还提到(重点是我的):
和用户 Y 在 sudoers 文件中但截至目前,用户 X 还不是。
Polkit 不使用/etc/sudoers
,因此通过编辑该文件让用户能够运行sudo
并不意味着他们能够通过 Polkit 获得能力。这可能是您实际上想要编辑该文件的一个可能原因——如果您通缉授予用户权限sudo
但不授予 Polkit 权限。但是,您需要两者,而sudo
Ubuntu 中的组已为此配置,因此您应该只使用它。
自从你做能够使用 sudo 命令以 root 身份运行命令,您可以添加username
(当然,用实际的用户名替换它)通过运行以下命令添加到 sudo 组:
sudo usermod -aG sudo username
或者,如果您想使用 Polkit 来添加它,您可以运行此命令,该命令完成后具有完全相同的效果:
pkexec usermod -aG sudo username
运行上述任一命令后,username
将能够通过 sudo 和 Polkit 以 root 身份执行任意操作。请注意,usermod
需要-a
标志,如图所示,否则它将消除您不想要的其他组的用户。
也可以看看如何将现有用户添加到现有组?
如果你有兴趣如何sudo 和 Polkit 都设置为向sudo
组中的用户授予权限,答案可以从它们的配置文件中找到。默认情况下,/etc/sudoers
包括以下几行:
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
/etc/polkit-1/localauthority.conf.d/51-ubuntu-admin.conf
由组成:
[Configuration]
AdminIdentities=unix-group:sudo;unix-group:admin
因此,sudo 和 Polkit 都配置为授予属于admin
和sudo
组之一或两者的用户管理权限。admin
列出 组是为了与旧版本的 Ubuntu 兼容,其中admin
代替sudo
,以防您从此类版本升级并且拥有 中的用户帐户admin
但没有sudo
。但除了这种情况之外,您可能甚至不需要有组admin
。运行getent group admin sudo
将显示其中哪些组存在以及其中有哪些用户。在新安装的 14.04 系统上,它不会显示任何内容admin
。因此,使用sudo
组而不是admin
组来使用户成为管理员。
这些配置细节适用于 Ubuntu 14.04,因为你在问这个问题时正在运行,但也适用于撰写本文时的所有后续版本,直到 Ubuntu 17.10。在所有sudo
当前支持的 Ubuntu 版本上,将用户添加到组是赋予他们完全 sudo 和 Polkit 权力的最有效和最合适的方法。
我想承认视频直播既要感谢对另一个答案(现已删除)的有用评论,这促使我写下这个答案,也要感谢我验证我提供的有关内容的信息在 Ubuntu 17.10 时仍然准确sudoers
。51-ubuntu-admin.conf
答案3
没有所谓的默认身份验证用户。默认情况下,Ubuntu 安装期间创建的用户(就您而言,X) 是管理员,即它隶属于 sudo 组。因此,当您执行诸如安装软件之类的高级任务时,系统会要求您输入 sudo 组中用户的密码。
现在当您添加新用户时是,默认情况下,它是标准用户,必须手动将其添加到 sudo 组,或者一般来说,以管理员身份安装应用程序。将用户添加到 sudo 组后,在执行提升任务时,系统会要求您输入用户 Y 的密码(显然是以 Y 身份登录时)。