禁用所有用户的关机命令,甚至是root用户-结果?


11

我想shutdown在Ubuntu Server安装上为所有用户甚至root用户禁用该命令。

我这样做的原因是为了确保我不习惯以这种方式关闭计算机,因为我与此同时将SSH SSH到许多生产计算机中,并且我不这样做想要通过在错误的窗口中键入命令来意外关闭其他计算机之一。

我要禁用关闭的服务器仅在Windows桌面上的VirtualBox内运行,并且我仅将其用于本地测试,因此,如果无法从命令行关闭它,则不是问题。

我已经通过确保在VirtualBox映像上输入不同的密码来缓解该问题,但是显然,如果我sudo位于其中一台生产计算机上的“窗口”中,我仍然可能会意外关闭它。

我的问题是:

  1. 如何禁用关机命令?
  2. 如果我确实禁用了shutdown命令,是否应该引起任何后果?更具体地说,是否会禁用对ACPI关闭的支持,这相当于按物理计算机上的电源按钮?它会影响其他通用应用程序吗?

有关信息,我只是使用此VirtualBox映像来试用Shell脚本,运行Tomcat和Java以及类似的东西。


2
我认为更改系统的这种核心行为以防止人为错误是一个坏主意。从长远来看,这可能带来更多问题,而这并不能解决。如果您为每个系统保留不同的用户密码,则可以最大程度地降低风险(因为它需要sudo)。您应该养成不依赖于特定系统更改的良好习惯,rm / cp / chmod经常会导致更严重的灾难,这些灾难会更频繁地使用,我想您不会禁用这些习惯。
若奥·平托

尽管我同意这一点,并且绝对是正确的做法,但这只是为了避免出现一个很小的情况,因为我在桌面上拥有一个非官方的Ubuntu映像,以使我能够尝试尝试而不会冒险老板的机器的数量:)
Rich

Answers:


3

如果通常将命令运行为sudo shutdown,而不是sudo /sbin/shutdown,则可以为“关机”设置一个全局shell别名,以仅向终端回显一条消息。真正的可执行文件仍将存在于所有其他目的。


如果您只是想打扰一个习惯,这听起来是最好的方法。
ændrük

2
但是请注意,设置shell别名(alias shutdown=sl)的明显方法不会对sudo的参数产生任何影响。在zsh中,您可以定义确实与参数匹配的别名,但是我认为bash中不会。sudo如果第一个参数是,您可以别名为拒绝执行任何操作的Shell脚本shutdown
poolie

2
换句话说,这实际上是行不通的。
poolie 2011年

14

更好的方法解决这个问题是安装莫莉后卫程序上的框,你不要想关机,而不是试图训练自己永远不会运行关机。

molly-guard试图防止您意外关闭或重新启动计算机。它通过在现有命令之前进行两次检查来实现此目的:停止,重新引导,关闭和关闭电源。

典型的配置是它要求您键入计算机的主机名,以确认您确实在正确的主机名上。

可以将新脚本添加到/etc/molly-guard/run.d(如联机帮助页中所述,脚本文件必须遵循期望的命名run-parts

如果您真的想禁用shutdown(这是一个奇怪的想法),请执行

chmod 0 /sbin/shutdown

然后,如果需要使用它,请将其更改为0755。


一个好主意,但可惜的是不可能,因为我对系统没有足够的控制权,无法安装自己的软件。可悲的是,我确实有足够的控制权可以将其关闭!
Rich

4
你是认真的吗?真奇怪 如果您只有sudo权限才能运行shutdown,那么也许您可以说服人们更改sudo以发出大提示,或者始终要求输入密码。如果您有意外关闭它们的风险,则安装molly-guard符合管理员的利益。
poolie 2010年

1

要禁用关闭命令,只需使二进制文件不可执行,即sudo chmod a-x /sbin/shutdown 我也不认为它将影响其他任何关闭方法,因为正如关闭的man条目所述

shutdown向init守护程序发送请求,以将系统置于适当的运行级别

因此,即使禁用了shutdown命令,其他任何命令/脚本也可以执行此操作,例如,我仍然可以使用GNOME菜单中的shutdown来关闭系统。另外,您仍然可以使用重新启动命令从命令行重新启动计算机


1

shutdown命令在中/sbin/shutdown。您可以通过执行以下操作禁用它:

sudo mv /sbin/shutdown /sbin/really-do-shutdown

但是:这意味着关闭系统的通常方法几乎不再起作用。在我的测试机上关闭gnome以获得该答案,将导致它退出您并返回GDM。

如果您之后要关闭系统,则必须执行

sudo init 0

“禁用”关闭将影响使用该命令执行任何操作的每个应用程序。由于init 0不是建议的关闭系统的方法,因此必须关闭系统的所有程序都将使用shutdown该程序,它将不再起作用。

  • 由于缺少文件或文件不可执行,应用程序也可能引发异常,即使不需要关机也可能导致它们崩溃。这是一个极端的情况,您可以通过在其位置移动一些二进制的,理想的可执行文件(不是shell脚本-将无法工作)来解决。例如:

    sudo cp /bin/ps /sbin/shutdown
    

    这是您安全地将原件移开之后

现在,这一切都是很棘手的,出于JoãoPinto的评论中概述的原因,我建议不要这样做。但我不会阻止您这样做。:-)

不仅要备份/ sbin / shutdown,而且要制定恢复计划,以防造成麻烦。例如,不要在无法访问的服务器上执行此操作。并假设系统根本不启动,请事先测试您的恢复计划(当然,它会启动-我已经测试过了-但放心)。


0

我认为应该采取其他解决方案,服务器应该具有ssh策略以通过ssh禁用关闭和init 0,或者必须在控制台上显示特殊的对话框(例如Windows),以输入“为什么”和特殊的“关闭密码” 。为此,电源按钮应在服务器使用时受密码保护。

此刻,我们使用“物理钥匙开关= 4欧元”代替按钮。


0

我要禁用shutdown命令。

cp / sbin / shutdown / sbin / shutdown-backup

rm / sbin /关闭

这是因为如果有人试图强制使用此命令,那么他也无法

现在没有人能够使用shutdown命令。

它将显示一条未找到的消息命令。

vim /etc/bash.bashrc

在bash.bashrc的最后添加一行

alias shutdown =“ echo'不允许您使用此命令''

如果您要它退回(启用)。只是复制回来

cp / sbin / shutdown-backup / sbin / shutdown

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.