如何阻止访问关机但不重新启动?

Dav*_*and 20 reboot sudo shutdown networking plex

我有一台 ubuntu 电脑作为 plex 服务器运行。我该如何获得它,以便没有人可以关闭计算机,而只允许用户重新启动计算机?我知道在 Windows 中可以,但我只是想知道在 ubuntu 上是否可以。

mat*_*igo 27

最有效的方法是屏蔽断电目标,如下所示:

sudo systemctl mask poweroff.target
Run Code Online (Sandbox Code Playgroud)

现在,任何人都无法关闭机器,除非他们按住电源按钮或以物理方式断开机器的电源。

重新启动不受此掩码的影响。


如果您将来需要关闭机器进行维护或更换硬件,您可以unmask

sudo systemctl unmask poweroff.target
Run Code Online (Sandbox Code Playgroud)

  • 我怀疑这会影响神奇的 SysRq 关键内容,例如 alt+sysrq+o 来关闭电源(https://en.wikipedia.org/wiki/Magic_SysRq_key),所以如果你有远程控制台访问,看起来 Linux 就像一个真正的物理键盘(例如通过 KVM-over-IP),如果 Ubuntu 的默认掩码还没有,您还希望使用“/etc/sysctl.d/10-magic-sysrq.conf”来保护更有趣的键盘防止这种情况发生(也许还有不安全的重启)。 (4认同)

Chr*_*ard 10

如果您只需要向非管理员用户授予重新启动的权力,您可以在文件中为他们添加一个条目sudoersforreboot(和/或systemctl reboot,取决于您希望他们运行的内容)。然后他们将能够运行sudo reboot(和/或sudo systemctl reboot)。这个答案假设他们无法以其他方式访问sudo\xc2\xa0\xe2\x80\x94 即,他们是不属于该组的普通非管理员用户wheel

\n

sudoers文件位于/etc/sudoers,但您不应该直接编辑它。相反,您应该只使用 来编辑它visudo。您需要成为 root 才能编辑它,因此您将运行sudo visudo. 该visudo命令将验证您编辑的语法,您应该始终使用它来避免破坏您的配置并阻止将来获得 root 访问权限。

\n

然后你可以将类似以下几行的内容添加到你的sudoers文件中:

\n
username ALL=(root): /usr/sbin/reboot\nusername ALL=(root): /usr/bin/systemctl reboot\n
Run Code Online (Sandbox Code Playgroud)\n

其中username是用户的用户名(或%groupname组),路径是系统上命令的实际路径(使用 进行检查which,例如,which reboot.)。

\n

欲了解更多信息,请查看man sudoersman sudoman visudo

\n