当我尝试在 ubuntu 中执行某些操作时,我被要求使用 root 用户进行身份验证,但 ubuntu 没有为我提供哪个 root 用户的选项,它只是将其指定为设置我的机器的用户。我想知道如何更改它选择运行身份验证的用户?
例如,如果我想从 Ubuntu 软件中心安装软件,我需要通过用户 X 进行身份验证,我想将其更改为全局用户 Y。
我也知道我可以从命令行使用 sudo 运行东西,但我不想这样做。
我正在使用 ubuntu 14.04。用户 Y 在 sudoers 文件中,而现在用户 X 不在。
mur*_*uru 16
一段时间以来,sudoers它并不是在 Ubuntu 和其他 Linux 发行版上控制用户权限的唯一方法。Polkit允许对权限进行更细粒度的控制。当您在最新版本的 Ubuntu 上使用 GParted 或 Synaptic 时,通常使用 polkit 完成身份验证。
要将用户(例如Y)设置为 polkit 的管理员,请在/etc/polkit-1/localauthority.conf.d/(例如99-custom.conf)中创建一个文件,其中包含:
[Configuration]
AdminIdentities=unix-user:Y
Run Code Online (Sandbox Code Playgroud)
您可以使用pkexecas测试这是否正确应用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 ===
Run Code Online (Sandbox Code Playgroud)
由于您已经拥有管理员用户,因此您可以通过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):
Run Code Online (Sandbox Code Playgroud)
GUI 应该提供一个下拉列表。
TL;DR:将用户添加到 sudo 组可以解决此问题,因为sudo 和 Polkit都使用该组。sudo usermod -aG sudo username
在 Ubuntu 系统上授予用户管理权限的通常且预期的方法是将用户帐户添加到组中sudo。这不仅通过 sudo 赋予他们权力,还通过 Polkit 赋予他们权力。允许您在具有管理权限的用户之间进行选择的图形提示是 Polkit 提示,而不是 sudo 提示。正如muru 所说,大多数提示您输入密码以执行管理任务的图形程序都使用 Polkit,而不是sudo。
但是,要使用户成为管理员,允许他们以 root 身份使用 sudo 和 Polkit 执行操作,并让他们出现在用户列表中进行身份验证,就像使用 Polkit 时一样,您不需要单独配置 sudo 和 Polkit,我建议不要这样做。只需将用户放入sudo组中即可。不要被这个名字所迷惑——Polkit 就像 sudo 一样尊重这个群体。
您的问题的措辞非常强烈地表明,您没有将用户添加到 Polkit 组,而是为该特定用户添加了一个自定义条目/etc/sudoers:
...它只是将其指定为设置我的机器的用户。
安装 Ubuntu 时创建的用户将添加到该sudo组中。
你提到(强调我的):
用户Y 在 sudoers 文件中,而目前用户 X 不在 sudoers 文件中。
Polkit 不使用/etc/sudoers,因此为用户提供通过编辑该文件来运行的能力sudo并不会给他们通过 Polkit 的能力。这可能是您实际上想要编辑该文件的一个可能原因——如果您想授予用户权力sudo但不授予 Polkit。然而,您两者都需要,而且sudoUbuntu 中的组已经配置好了,所以您应该只使用它。
由于您确实能够使用 sudo 命令以 root 身份运行命令,因此您可以username通过运行以下命令将其添加(当然,将其替换为实际用户名)到 sudo 组:
sudo usermod -aG sudo usernameRun Code Online (Sandbox Code Playgroud)
或者,如果您想使用 Polkit 添加它,您可以运行此命令,完成后具有完全相同的效果:
pkexec usermod -aG sudo usernameRun Code Online (Sandbox Code Playgroud)
运行这些命令中的任何一个后,username将能够以 root 身份通过 sudo 和 Polkit 执行任意操作。请注意,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
Run Code Online (Sandbox Code Playgroud)
/etc/polkit-1/localauthority.conf.d/51-ubuntu-admin.conf由组成:
[Configuration]
AdminIdentities=unix-group:sudo;unix-group:admin
Run Code Online (Sandbox Code Playgroud)
admin因此,sudo 和 Polkit 都配置为向和组中的一个或两个组中的用户授予管理权限sudo。列出该admin组是为了与旧版本的 Ubuntu 兼容,其中admin使用的是sudo,以防万一您从此类版本升级并且拥有用户帐户admin但没有sudo。但除此之外,你可能甚至没有一个团体admin。运行getent group admin sudo将显示哪些组存在以及其中包含哪些用户。在新安装的 14.04 系统上,它不会显示任何admin. 所以使用sudo组,而不是admin组,让用户成为管理员。
这些配置详细信息适用于 Ubuntu 14.04,因为您在提出此问题时正在运行,而且也适用于撰写本文时的所有后续版本,直至并包括 Ubuntu 17.10。在所有当前支持的 Ubuntu 版本上,将用户添加到sudo组是赋予他们完整的 sudo 和 Polkit 权限的完全有效且最合适的方法。
我要感谢Videonauth对另一个答案(已被删除)的有用评论,导致我写了这个答案,并验证了我提供的有关 内容的信息在 Ubuntu 上仍然sudoers准确51-ubuntu-admin.conf17.10。