想要通过使用关机等命令的别名来防止意外关机、重启等

想要通过使用关机等命令的别名来防止意外关机、重启等

我正在尝试为诸如、等命令添加别名shutdownreboot我知道这不是阻止访问的万无一失的方法,但这只是为了防止意外执行。

我看过superuser.com/questions/244342 以及其中提供的所有链接。

要为类似的东西添加别名,sudo /sbin/shutdown我首先必须sudo单独添加别名,然后/sbin/shutdown再添加echo 'Not allowed'

但是这似乎不起作用,因为sudo显然是在 root 下执行的。因此,在.bashrc用户的别名中为这些设置别名是没有意义的。我该如何解决我的问题?我不想修改任何系统属性,例如.bashrcroot 用户的等。

答案1

正如您正确观察到的那样,shell 别名不适合您的目的。

避免意外执行这些命令的正确方法sudo是更新您的配置sudo(使用visudo)并完全阻止访问。您可以指定一个组,该组的成员只能使用 执行这些命令sudo,而其他成员则不能。

答案2

好的,所以'正确的' 方法是不给这些用户 sudo,但似乎这是你无法避免给予用户此访问权限的情况之一(假设你确实阻止他们运行关机,他们可能会改为rm -rf /*

但是,为了阻止他们通过 sudo 运行特定命令,您可以在 sudoers 文件中进行控制:

首先,我们定义一个用于关闭系统的别名/etc/sudoers.conf

Cmnd_Alias SHUTDOWN = /usr/sbin/shutdown

然后我们删除 wheel 组中任何人运行此命令的权限:

%wheel ALL = ALL, !SHUTDOWN

这意味着所有用户都可以运行所有机器上的所有命令,除了关机 cmnd_Alias 中的命令之外。

man sudoers将对此进行更详细的解释,实际上几乎包含了这个确切的解释。还请注意,这不会阻止故意尝试运行关机命令的人,只会阻止那些无意中运行该命令的人(可能是因为他们登录了错误的机器)。

答案3

即使你成功阻止用户运行所有命令直接负责重新启动,具有sudo访问权限的用户(其中​​ sudo 访问权限不是被列入白名单的特定二进制文件集(他们无权修改这些二进制文件,并且这些二进制文件不可能被操纵来运行重启代码)仍然可以通过以下方式重启系统:

  1. 将源代码下载到像reboot或这样的程序halt(例如在 GNU binutils、IIRC 中),使用 进行编译,然后在其本地副本上gcc运行。sudo ./reboot

  2. 用 Ruby、Python、C/C++、Java 等编写一个程序,调用适当的系统调用来启动重启或关机。

  3. 他们可能利用符号链接或硬链接来绕过黑名单。从安全角度来看,这些事情总是很难处理,但我脑子里没有任何具体的例子。

如果你 100% 确定你授予用户权限运行的所有二进制文件sudo都无法被操纵来执行任意代码(这会导致上述第 1 项或第 2 项),那么或许没问题。但是狡猾的用户(或以该用户身份运行的程序)仍然可以利用这些程序中的安全漏洞来提升权限并重新启动/关闭。

如果你完全相信所有有sudo访问权限的用户都会合作和你在一起,不尝试做他们不被允许做的事情,那么黑名单应该可以防止“事故”。但你应该准备好接受后果如果某人出于某种原因决定偏离政策。

如果您对用户有一丝怀疑,最好为每个用户提供一个虚拟机或一个安全容器。

相关内容