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