当Ubuntu询问管理员用户密码时,它如何确定要询问哪个管理员用户?


11

我正在设置一台将由几个人使用的Ubuntu(10.10)计算机。它是一间小型办公室中的共享计算机。它的主要角色是使用VirtualBox托管虚拟机以及使用Samba服务文件。

对于Samba,需要设置多个用户帐户,以便各个人可以从自己的工作站连接到Samba共享。但是,还有一个专用于运行多个人的虚拟机的帐户。有时人们尝试使用该帐户执行需要提升特权的操作-这会导致Gnome的“请输入管理用户的密码”对话框弹出。但是,此对话框要求输入密码-当我设置机器时,我的是第一个创建的帐户,因此似乎在假设我是唯一被授予sudo权限的用户。

可以这么说,我想指定另一个用户为“首选管理员”,它不能是共享帐户用户,因为每个人都必须知道该帐户的密码,因此我希望严格限制其特权。它不能是我的帐户,因为我无法用任何方法告诉别人我的密码,而且我不会经常出现在该站点上以自己输入密码。不过,有人可以亲自进行此操作,因此我将其添加到中/etc/sudoers。我该如何告诉Ubuntu,当它需要提升某些特权时,应该首先要求他们的帐户?

总结一下:

  • 机器上的帐户:Alice,Bob,Carol,Dave和Eliza。
  • 安装Ubuntu时,Alice是在安装过程中添加的第一个用户。
  • 实际上,“戴夫”是许多人使用的帐户,/etc/sudoers因为密码是公共知识而无法进入。
  • 鲍勃已在Gnome中设置为“管理”帐户,并且已正确输入/etc/sudoers-鲍勃是该办公室的老板。
  • 当以Bob,Carol,Eliza或Dave身份登录时尝试了需要提升特权的操作时,系统应请求Bob的凭据。
  • 当以Alice身份登录时尝试了需要提升特权的操作时,系统应请求Alice的凭据(尽管Alice属于buckaroo sysadmin,并且习惯于su -执行扩展的管理任务)。

我需要进行哪些配置更改才能在此处实现所需的状态?


一种替代方法是允许与虚拟化相关的命令自动使用管理员权限。我确定我读过一个问题,但我忘了。
Oxwivi 2011年

快速谷歌搜索告诉我您是从同一sudoers文件中执行此操作的,您可以查看其手册以获取更多信息。
Oxwivi 2011年

我考虑过在编辑时sudoers:出于安全考虑,这不是万不得已。另请参阅enzotib的答案-问题的一部分是sudo和PolicyKit 之间的混淆。
Brighid McDonnell

Answers:


9

首先,我们要指出,非root用户可以通过两种不同的机制来执行特权操作。

  1. sudo

  2. PolicyKit

当您显式运行带有命令sudo或带有其包装命令的菜单项时gksu(例如Synaptic Package Manager),将使用第一个命令。
在这种情况下,所需密码是调用用户(通常是登录用户)的密码。

当支持PolicyKit的应用程序尝试执行特权操作时,将使用第二个。在这种情况下,应用程序(通过D-Bus)询问PolicyKit本地权限是否可以执行该操作。然后,地方当局通过身份验证代理,要求活动用户证明其身份。对话框窗口如下所示(不幸的是使用意大利语:)

在此处输入图片说明

您可以从黑色小三角形和标签Details识别PolicyKit 。如您所见,如果该admin组中有一个以上的用户,则可以从列表中选择要用于身份验证的用户。

鉴于所有这些,sudo就可以实现的配置而言,PolicyKit和PolicyKit都更加复杂:您可以配置无需密码即可执行,只能由特定用户或组执行的操作等。

提到您的问题,当应用程序使用的机制是PolicyKit时,独立于当前登录用户,所需的密码将是Bob或Alice的密码(如果我理解正确,则只有两个admin用户),并且您可以更改从列表中选择要用于身份验证的用户。

当应用程序使用的机制是sudo(对于通过GUI执行的管理任务,这种情况不再那么频繁)时,您没有直接,简单的方法来选择用于身份验证的用户。


1
我觉得我现在对情况有了更好的了解。谢谢。
Brighid McDonnell

6

显然,sudo在这种情况下,这将是我的首选。主要的问题似乎是,大多数(实际)管理员实际上并不使用/etc/sudoers它最大限度地(User_AliasRunas_AliasHost_AliasCmnd_Alias)。

大多数管理员最终仅使用一些现有规则并添加用户,或者更糟的是,仅将用户添加到sudo通常在Ubuntu设置中存在规则的组(%sudo...)。当然,这赋予了各个用户自由的统治权和超级用户帐户的全部权力。

根据您的评论:

所以我加了 /etc/sudoers

我认为您也不要尽可能使用它。

在像您这样的场景中,我会按照字面意思写一些鲍勃将要限制的动作。实际上,这就是我在维护的服务器上执行的操作,以允许两个特定用户重新引导主机上的特定KVM来宾。这些脚本将包含一个带有到解释器的绝对路径的hashbang(例如#!/bin/dash而不是#!/usr/bin/env bash),并且可能与在特权任务(/bin/dash/bin/sh)其他地方使用的shell一起运行。这些只是预防措施。除此之外,我将确保对所有二进制绝对路径进行硬编码,并使用尽可能少的绝对路径。例如,使用的时候bash/ dash我宁愿builtin结束了commandS(参见man bash)。您可以通过为变量分配绝对路径并基于该变量引用程序来使其可维护($VIRSH而不是/usr/bin/virsh)。如果可以,请在调用任何外部脚本之前检查其代码。特别是如果您需要在特权上下文中调用它们。就我而言,我还将用户限制在特定的根目录和特定的SSH子系统中,因为它们仅通过sshd公共密钥身份验证连接到计算机。显然,您不需要。

确保chown root: <the-script>; chmod u=rw,a=,a+rx <the-script>防止除root正常人之外的任何人修补它。另外要小心setuidsetgid目标二进制文件启用位(find可以用来发现它们)。现在假设您的脚本位于/usr/sbin/priv-action

现在编辑您的/etc/sudoersnoexec可以用来防止其他二进制文件,除了明确允许的二进制文件以外。实际上,还有很多其他设置,而不仅仅是我在这里描述的那些设置。所以一定要咨询一下man sudoers

现在,我更喜欢User_Aliassudoers文件中命名用户(),但是您也可以使用Group_Aliasman sudoers)或实际的系统组(例如%sudo):

# The list is comma-separated: bob,alice,...
User_Alias      LIMITED_ADMINS=bob

然后添加命令别名以允许执行该特定脚本:

# The list is comma-separated: /usr/sbin/priv-action,/bin/bash,...
Cmnd_Alias      PRIV_ACTION=/usr/sbin/priv-action

最后但并非最不重要的一点是神奇的一句话,即允许bob(或更确切地说,在下面列出的用户LIMITED_ADMINS)通过脚本执行特权命令:

LIMITED_ADMINS  ALL=(root) PRIV_ACTION

与以前的别名定义不同,该行需要说明。因此,让我们首先深入研究“用户规范”行中的各个部分。这里有man sudoers帮助:

用户规范的基本结构是who where = (as_whom) what

示例行(在大多数Ubuntu设置中均可找到):

root    ALL=(ALL) ALL

这表示,一个名为 root(用于#0将其绑定到UID 0)的用户可以在所有主机上的任何用户上下文下运行,但是会要求其提供密码(假定为默认行为)。NOPASSWD在最后一个标签之前添加标签ALL也将允许root执行相同操作而无需输入密码(例如:)root ALL=(ALL) NOPASSWD:ALLALL是各种别名类型的固有通配符别名。

回到鲍勃:

LIMITED_ADMINS  ALL=(root) PRIV_ACTION

将允许bob和其他列出的成员以用户(隐含组,但可以给出,请参阅)的身份User_Alias LIMITED_ADMINS(在所有主机上)运行。它变得更好了。仍然假设您编写此脚本,则可以允许使用各种参数,从而避免编写多个脚本。乐于采用类似于shell的通配符来限制允许传递参数的可能性。ALLrootman sudoersCmnd_Alias PRIV_ACTION/etc/sudoers

我一直发现管理员没有使用sudoers应该使用的方式,这就是为什么我欣赏两本书《 Linux Server Hacks》和《 Linux Server Hacks Volume Two》中各自的“ Hack”的原因,这使我开始学习更强大的功能。

您可以针对您的特定情况提出各种复杂的问题-可能无法完全帮助安全方面-针对您的特定情况的解决方案,但是一旦您说出了基本词汇,/etc/sudoers就可以执行相当神奇的壮举:)

注意:请记住,/etc/sudoers.d/如果您愿意,也可以在下面创建一个新文件。假设您/etc/sudoers包含以下行:

#includedir /etc/sudoers.d

-1

在Unix / Linux中只有一个超级用户,其名称为root,但sudoers是可以成为root的用户。您应该使用组:

newgrp admins

然后将用户分配到该组:

chgrp alice admins

然后将admins组添加到sudoers配置文件中,就像该组是用户一样。

更新资料

或者,您可以将任何用户添加到管理组:

chgrp alice admin

抱歉,我按下了Tab键,但没有完成就将其发送。
弗朗西斯科·瓦尔德兹

根据不完整的答案对评论进行了排序。试用当前答案。假设这个额外的博览会是为将来的读者准备的,可能对系统管理员的工作不太了解。
Brighid McDonnell

当然,我并不是要自大,有一个有关sysadmin
Francisco Valdez,

我知道ServerFault存在。我在这里问是因为这是Ubuntu特有的行为。
Brighid McDonnell

AFAIK: adduser <user>addgroup <group>adduser <user> <group>是在Debian / Ubuntu的首选方式。
0xC0000022L
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.