禁用所有用户的shutdown命令,甚至是root权限?

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

我想这样做的原因是为了确保我不会养成以这种方式关闭机器的习惯,因为我在这个机器人的同时SSH连接到许多生产机器,而我不这样做想要通过在错误的窗口中键入命令而意外关闭其他一台机器。

我想要的服务器只在我的Windows桌面上的VirtualBox内运行时禁用关闭,我只将它用于本地测试,所以如果我不能从命令行关闭它就不会有问题。

我已经通过确保我在VirtualBox图像上有不同的密码来缓解这个问题,但很明显,如果我在其中一台生产机器上的sudo ‘窗口’内,我仍然会意外地将其关闭。

我的问题是:

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

有关信息,我只是使用此VirtualBox映像来尝试shell脚本,运行Tomcat和Java等等。

如果您通常以sudo shutdown而不是sudo /sbin/shutdown运行命令,那么您只需为“shutdown”设置一个全局shell别名,即可将消息回显给终端。 真正的可执行文件仍将用于所有其他目的。

解决这个问题的一个更好的方法是将molly-guard程序安装在你不想关闭的盒子上,而不是试图训练自己永远不要关机。

molly-guard试图阻止你意外关闭或重启机器。 它通过在现有命令之前注入几个检查来执行此操作:暂停,重新启动,关闭和关闭电源。

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

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

如果你真的想要禁用shutdown (这是一个奇怪的想法),那就行了

 chmod 0 /sbin/shutdown 

然后,如果你需要使用它,请将其恢复为0755。

要禁用shutdown命令,只需使二进制文件不可执行,即sudo chmod ax /sbin/shutdown另外我不认为它会影响任何其他关闭方法,因为关闭的man条目说

shutdown向init守护程序发送请求,以使系统进入适当的运行级别

所以任何其他命令/脚本都可以在禁用shutdown命令后执行此操作,例如我仍然可以使用GNOME菜单中的shutdown来关闭我的系统。 您还可以使用reboot命令从命令行重新启动计算机

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

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

但是 :这意味着几乎所有关闭系统的常用方法都不会再起作用了。 在我的测试机器上关闭gnome以获得此答案会导致它只是让您退出并将您带回GDM。

如果你想在事后关闭你的系统,你必须这样做

 sudo init 0 

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

  • 由于缺少文件或文件不可执行 ,应用程序也可能抛出exception,即使不需要关闭,也可能导致它们崩溃。 这是一个边缘情况,你可以通过移动一些二进制,理想的可执行文件(不是一个shell脚本 – 不起作用)来解决这个问题。 例如:

     sudo cp /bin/ps /sbin/shutdown 

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

现在,所有这些都是非常hacky, 我推荐反对它 ,原因是JoãoPinto的评论中提到的原因。 但我不会阻止你这样做。 🙂

不仅要备份/ sbin / shutdown,还要制定恢复计划 ,以免造成任何麻烦。 例如,不要在无法访问的服务器上执行此操作。 并且事先测试你的恢复计划,假设系统根本不启动(它当然会启动 – 我已经测试过了 – 但保持安全)。

我认为它应该采取另一种解决方案,服务器应该有一个ssh策略来禁用关机和init 0 over ssh,或者必须在控制台上显示一个特殊的对话框,比如在Windows上输入“why”和特殊的“shutdown password” 。 对于此,电源按钮应在服务器使用时受密码保护。

目前我们使用“物理键开关= 4Euros”而不是按钮。

我想禁用shutdown命令。

cp / sbin / shutdown / sbin / shutdown-backup

rm / sbin / shutdown

这是因为如果有人试图强行要使用这个命令,那么他也不能

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

它将显示未找到的消息命令安装它。

vim /etc/bash.bashrc

在bash.bashrc的最后添加一行

别名shutdown =“echo”不允许使用此命令’“

如果你想要它(启用)。 把它复制回来

cp / sbin / shutdown-backup / sbin / shutdown