超级用户不能侵犯哪些访问权限?

Kol*_*nya 23 root privileges access-control

神父 兄弟 乔治在他的一次演讲中(用俄语)说,有一些超级用户不能侵犯的访问权限。那就是有一些访问权限可以禁止超级用户做某事。

我无法在 Internet 上找到这些信息,我很好奇它们是什么。这大概和系统的核心执行有关吧?也许他无法停止某些系统进程?或者他不能在实模式下运行一个进程?

这个问题与 SELinux 无关(乔治在问题之前就在谈论它)。

Arc*_*mar 25

拒绝根访问

root可以拒绝直接网络访问。这在 Internet 连接的主机上很有用,因为它要求您以 身份登录smith,然后以sudo.

一些 root 不能做的事情

这不是因为缺乏特权。我看不到 root 不能做的任何事情,但是一些技术问题可能会被视为“禁止”。

我是root,为什么我不能创建/删除这个文件,而普通用户可以?

您在 NFS/samba 共享上,并且您没有获得特定的 ( access=) 授权。普通用户不符合普通法。(请参阅下面的本地与远程根)

我是root,为什么我不能杀死这个进程?

有一个挂起的 I/O 和物理驱动器/远程 LUN 已断开连接,进程只能通过重新启动来终止。

我是root,如何获取archemar 的密码?

你可以su - archemar,或者在不知道前一个密码的情况下更改 archemar 的密码,但你无法读取它(缺少键盘记录器),因为密码是使用单向哈希存储的。

本地与远程根

  • 您可以在您的工作站/PC 上成为 root,并使用公司/学院/大学/提供商 NFS 共享。
  • 接下来,您只能在导出 NFS 的计算机上进行非 root 登录。

现在

cp /bin/bash /nfs/home/me/bash
chown root /nfs/home/me/bash
chmod u+s /nfs/home/me/bash
Run Code Online (Sandbox Code Playgroud)

只需登录 NFS 服务器,运行./bash,您就可以在公司/大学服务器上成为 root。

  • @TomHunt,不授予“root”对 NFS 共享的访问权限的原因之一是为了防止在远程服务器上创建“suid root”二进制文件,这可以用来完全远程访问服务器。 (5认同)
  • 这是一个古老的问题“即使`root`无法访问,他也可以创建密码吗?” (4认同)

Joh*_*ohn 12

在通常情况下,这是不正确的 - 超级用户对系统提供的任何功能具有特权/权限(1)。当您将 SELinux 混入其中时,这条规则就会失效。使用 SELinux,甚至可以限制 root 的权限以禁止某些操作。但是,具体禁止的操作高度依赖于本地机器的SELinux配置,所以即使使用SELinux,这个问题也不能笼统地回答。

(1) - 如果系统不提供给定的功能,例如没有实时内核功能,那么我认为“root 无权访问此功能”的陈述是错误的,因为该陈述依赖于错误假设(即该系统上的任何人都可以使用给定的功能)

  • 不一定是真的。去掉它的 CAP_NET_ADMIN,uid 0 仍然不会让进程改变网络配置。(对于 CAP_SYS_ADMIN 及其控制的能力等也是如此)。 (2认同)

Sig*_*uza 7

一方面,有些事情是用户不能做的,比如

  • 硬链接目录(由于文件系统限制)
  • 写入已刻录的 CD-ROM(因为物理)

但这些都不是特权,因为它们不能被授予,对任何人来说都是不可能的。

然后对整个系统或其中一部分可以打开或关闭的限制。
例如,在 OS X 上,有一个选项只允许运行经过 Apple 签名的代码。

我也不认为这是一个实际的特权,因为如果超级用户不能,任何用户都不能拥有它。您只能全局禁用它。

编辑:
您对没有可执行位的文件的想法也属于这一类,因为实际上没有人能够做到这一点,也没有人可以被授予该权限。
即使授予另一个用户或组执行该文件的权限,但不是 root 或用户组 root 所在,root 仍然能够执行该文件(在 OS X 10.10、10.11 和 Ubuntu 15.04 服务器上测试)。

除了这些情况,root 几乎没有什么不能做的。
然而,有一种叫做内核模式(与用户模式相对)的东西。

据我所知,在一个健全的系统上,只有内核、内核扩展和驱动程序在内核模式下运行,而其他一切(包括您以 root 身份登录的 shell)都在用户模式下运行。
因此,您可以争辩说“成为 root 是不够的”。但是,在大多数系统上,root 用户能够加载内核模块,这些模块又会在内核模式下运行,从而有效地为 root 提供了一种在内核模式下运行代码的方式。

然而,有些系统(如 iOS)不可能(任意)实现这一点,至少在不利用安全整体的情况下不可能。这主要是由于安全性的提高,例如代码签名实施。
例如,iDevices 的处理器中内置了AES 加密密钥,只能从内核模式访问。内核模块可以访问这些,但这些内核模块中的代码也必须由 Apple 签名,以便内核接受它们。

在 OS X 上,从 10.11 (El Capitan) 版本开始,还有一种所谓的“无根模式”(尽管名称具有误导性,因为 root 仍然存在),它有效地禁止了 root 安装者仍然可以做的某些事情。
引用AskDifferent 上的这个优秀答案

这是它的限制,即使是从根:

  • 您不能修改 /System、/bin、/sbin 或 /usr 中的任何内容(/usr/local 除外);或任何内置应用程序和实用程序。只有安装程序和软件更新可以修改这些区域,甚至只有在安装 Apple 签名的软件包时才会这样做。