神父。 Br。乔治告诉他的一场讲座(俄语)有一些超级用户不能侵犯的访问权限。也就是说,有一些访问权限可以禁止超级用户做某事。
我无法在互联网上找到这些信息,我很好奇它们是什么。这大概是和系统核心执行有关的东西吧?也许他无法停止某些系统进程?或者他可能无法在实模式下运行进程?
这个问题与 SELinux 无关(乔治在问题之前就谈到过它)。
答案1
root 访问被拒绝:
root
可以拒绝直接网络访问。这对于连接互联网的主机很有用,因为它要求您登录为smith
,然后sudo
。
有些事情 root 不能做:
这并不是因为缺乏特权。我看不出 root 无法执行任何操作,但是某些技术问题可能会被视为“禁止”。
我是root,为什么我不能创建/删除这个文件,而普通用户可以?
您位于 NFS/samba 共享上,并且您没有获得特定的 ( access=
) 授权。普通用户不适用普通法。 (参见下面的本地根与远程根)
我是root,为什么我不能杀死这个进程?
有待处理的 I/O 并且物理驱动器/远程 LUN 已断开连接,只能通过重新启动来终止进程。
我是 root,如何获取 archemar 的密码?
你可以su - archemar
在不知道前一个密码的情况下更改 archemar 的密码,但你无法读取它(缺少键盘记录器),因为密码是使用单向哈希存储的。
本地根与远程根
- 您可以在您的工作站/PC 上获得 root 权限,并使用公司/学院/大学/提供商 NFS 共享。
- 接下来,您只能以非 root 身份登录导出 NFS 的计算机。
现在
cp /bin/bash /nfs/home/me/bash
chown root /nfs/home/me/bash
chmod u+s /nfs/home/me/bash
只需登录 NFS 服务器,运行./bash
即可获得公司/大学服务器的 root 权限。
答案2
在通常情况下,这是不正确的 - 超级用户拥有系统提供的任何功能的特权/权限(1)。当您将 SELinux 加入其中时,这条规则就失效了。使用 SELinux,甚至可以限制 root 的权限以禁止某些操作。然而,禁止的具体操作高度依赖于本地机器的 SELinux 配置,因此即使使用 SELinux,也无法从一般意义上回答这个问题。
(1) - 如果系统不提供给定的功能,例如没有实时内核功能,那么我认为“root 无权访问此功能”这一说法是错误的,因为该说法依赖于错误的假设(即给定的功能可供该系统上的任何人使用)
答案3
一方面,有些事情没有用户可以做的,比如
- 硬链接目录(由于文件系统限制)
- 写入已刻录的 CD-ROM(因为物理)
但这些都不是特权,因为它们不能被授予,对任何人来说都是不可能的。
然后,整个系统或部分系统的打开或关闭都会受到限制。
例如,在 OS X 上,有一个选项仅允许经过 Apple 签名的代码运行。
我也不认为这是一个实际的特权,因为如果超级用户不能拥有它,那么任何用户都不能拥有它。您只能全局禁用它。
编辑:
您对没有可执行位的文件的想法也属于这一类,因为从字面上看,没有人能够做到这一点,也没有人可以被授予该权限。
即使授予其他用户或组执行该文件的权限,但不是 root 或 root 所在的用户组,root 仍然能够执行该文件(在 OS X 10.10、10.11 和 Ubuntu 15.04 服务器上测试)。
除了这些情况之外,几乎没有什么 root 不能做的。
然而有一种东西叫做内核模式(与用户模式相对)。
据我所知,在一个健全的系统上,只有内核、内核扩展和驱动程序在内核模式下运行,而其他所有内容(包括您以 root 身份登录的 shell)都在用户模式下运行。
因此,您可能会说“成为 root 是不够的”。然而,在大多数系统上,root 用户能够加载内核模块,这些模块又将在内核模式下运行,从而有效地为 root 用户提供了一种在内核模式下运行代码的方式。
然而,在某些系统(如 iOS)中,这是不可能(任意)实现的,至少在不利用安全漏洞的情况下是不可能的。这主要是由于安全性的提高,例如代码签名的强制执行。
例如,有AES 加密密钥内置于 iDevices 的处理器中,只能从内核模式访问。内核模块可以访问这些,但这些内核模块中的代码也必须由 Apple 签名才能让内核接受它们。
在 OS X 上,自版本 10.11 (El Capitan) 起,还有一种所谓的“无根模式”(尽管该名称具有误导性,因为根仍然存在),它有效地禁止根安装程序仍然可以执行的某些操作。
引用自AskDifferent 上的这个优秀答案:
这是它的限制,即使是从 root 开始:
- 您不能修改
/System
、/bin
、/sbin
或中的任何内容/usr
(除了/usr/local
);或任何内置应用程序和实用程序。只有安装程序和软件更新可以修改这些区域,甚至只有在安装 Apple 签名的软件包时才会这样做。
答案4
一个例子是修改不可变文件:您可以设置一个文件属性i
,chattr
使文件即使对于 root 来说也是不可变的。例如:
# whoami
root
# touch god
# chattr +i god
# rm god
rm: cannot remove ‘god’: Operation not permitted
# touch god
touch: cannot touch ‘god’: Permission denied
请注意,该文件在ls -l
输出中显示为普通可写文件:
# ls -l god
-rw-r--r-- 1 root root 0 Oct 26 19:27 god
要查看该i
属性,您必须使用lsattr
:
# lsattr god
----i----------- god
这chattr 的手册页关于该属性的说明如下i
:
具有“i”属性的文件无法修改:无法删除或重命名,无法创建到该文件的链接,也无法向该文件写入任何数据。只有超级用户或拥有 CAP_LINUX_IMMUTABLE 能力的进程才能设置或清除该属性。
不过,root 可以轻松地撤销不变性:
# chattr -i god
# rm -v god
removed ‘god’