显然,sudo在这种情况下,这将是我的首选。主要的问题似乎是,大多数(实际)管理员实际上并不使用/etc/sudoers它最大限度地(User_Alias,Runas_Alias,Host_Alias,Cmnd_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正常人之外的任何人修补它。另外要小心setuid和setgid目标二进制文件启用位(find可以用来发现它们)。现在假设您的脚本位于/usr/sbin/priv-action。
现在编辑您的/etc/sudoers。noexec可以用来防止其他二进制文件,除了明确允许的二进制文件以外。实际上,还有很多其他设置,而不仅仅是我在这里描述的那些设置。所以一定要咨询一下man sudoers。
现在,我更喜欢User_Alias在sudoers文件中命名用户(),但是您也可以使用Group_Alias(man 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:ALL。ALL是各种别名类型的固有通配符别名。
回到鲍勃:
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