Linux 中有一些命令(poweroff
、reboot
等)可以在正常会话中无需 root 权限执行,但如果在 SSH 会话中执行则需要 root 权限。我想知道两件事:
这样做的目的是什么(为什么)?
这实际上是如何实现的(如何)?
答案1
首先,请注意,这不是普遍的行为。并非所有 Linux 系统都以这种方式配置,事实上,如果不进行认真的研究,我无法说出任何默认以这种方式配置的发行版。在大多数情况下,任何给定的 Linux 系统要么无论如何都需要 root 权限(这是大多数系统所做的),要么允许特定组中的任何人这样做,要么让每个人都这样做(尽管这种情况很少见,因为这是一个相当严重的安全漏洞,如果网络服务受到威胁,就会允许进行简单的 DoS 攻击)。
为什么?
原因很简单,当有人试图使用系统时,很容易意外地远程关闭系统。通过要求在控制台上实际存在(您称之为正常会话)或对系统的权限证明(通过身份验证sudo
获取 root 权限),系统使这种情况的发生变得更加困难。这意味着,通过实际在系统上或提供 root 凭据,您拥有足够的权限,即使其他人正在使用该系统也没关系。
如何?
如果对所讨论的系统了解不多,这个问题回答起来会比较困难,但我想到了以下几种方法:
- 您可以利用文件系统功能做一些巧妙的技巧来实现这一点,但是每次更新命令时都必须重新执行此操作。
- 对于 systemd,、
shutdown
和reboot
均由poweroff
systemd 提供,最终相当于各种systemctl
子命令。由于这一点以及 进行的会话跟踪logind
,应该可以非常轻松地施加此类限制。