神父 Br。乔治在他的一次演讲中(用俄语)告诉人们,有些访问权限是超级用户不能侵犯的。那就是有些访问权限可以禁止超级用户做某事。
我无法在Internet上找到此信息,并且很好奇它们是什么。这可能与系统的核心执行有关,不是吗?也许他无法停止某些系统进程?也许他不能在实模式下运行进程?
这个问题与SELinux没有关系(George在问题之前就在谈论它)。
SECBIT_NOROOT
和uid 0不再自动授予一项功能。
神父 Br。乔治在他的一次演讲中(用俄语)告诉人们,有些访问权限是超级用户不能侵犯的。那就是有些访问权限可以禁止超级用户做某事。
我无法在Internet上找到此信息,并且很好奇它们是什么。这可能与系统的核心执行有关,不是吗?也许他无法停止某些系统进程?也许他不能在实模式下运行进程?
这个问题与SELinux没有关系(George在问题之前就在谈论它)。
SECBIT_NOROOT
和uid 0不再自动授予一项功能。
Answers:
拒绝root:
root
可以拒绝直接网络访问。这在连接Internet的主机上非常有用,因为它要求您先输入smith
,然后按sudo
。
某些根目录无法执行的操作:
这不是缺乏特权。我看不到root不能做的任何事情,但是某些技术问题可能会被视为“禁止”。
我是root用户,为什么我不能创建/删除此文件,而普通用户却可以?
您正在使用NFS / samba共享,并且没有提供特定的(access=
)授权。普通用户无法遵循普通法。(请参见下面的本地根目录与远程根目录)
我是根,为什么我不能杀死这个过程?
有一个暂挂的I / O,并且物理驱动器/远程LUN已断开连接,只能通过重新引导杀死进程。
我是root,如何获取始祖密码?
您可以在su - archemar
不知道前一个密码的情况下更改它的密码,也可以更改它的密码,但是您无法读取它(缺少按键记录器),因为密码是使用单向哈希值存储的。
本地与远程根
现在
cp /bin/bash /nfs/home/me/bash
chown root /nfs/home/me/bash
chmod u+s /nfs/home/me/bash
只需登录NFS服务器./bash
并运行,您便是公司/大学服务器的超级用户。
root
本地用户,不一定在其他系统上。情况2和3不是特权(它们不能授予任何人)。因此+1,您的第一句话似乎是正确的。
root
在本地计算机上可以执行任何与本地用户相同的特权的操作,su - username
即使没有其他操作。我永远无法确定为什么他们会烦于root
无法写入这样的网络共享;似乎毫无意义。
root
即使他无法访问也可以创建密码吗?”
root
对NFS共享访问权限的原因之一是,防止在远程服务器上创建“ suid root”二进制文件,这可以用于对服务器的完全远程访问。
在通常情况下,这是不正确的-超级用户具有系统提供的任何功能的特权/权限(1)。当您将SELinux投入使用时,该规则就失效了。使用SELinux,甚至可以限制root的特权以禁止某些操作。但是,不允许的特定操作在很大程度上取决于本地计算机的SELinux配置,因此即使使用SELinux,也无法从一般意义上回答此问题。
(1)-如果系统未提供给定功能,例如,没有实时内核功能,那么我认为“ root无法访问此功能”语句是错误的,因为该语句依赖于错误的假设(即该系统上的任何人都可以使用该给定功能)
一方面,有些事情是用户无法做的,例如
但是这些不是特权,因为不能授予它们,对任何人来说都是不可能的。
然后,整个系统或其中部分可以打开或关闭的限制。
例如,在OS X上,有一个选项仅在Apple签名后才允许运行代码。
我也不认为这是实际的特权,因为如果超级用户不能,则没有用户可以拥有它。您只能全局禁用它。
编辑:
您对没有可执行位的文件的想法也将属于此类别,因为从字面上看,没有人能够做到这一点,并且没有人可以被授予该权限。
即使授予其他用户或组执行该文件的权限,但没有root或用户组root所在,root也仍然能够执行该文件(在OS X 10.10、10.11和Ubuntu 15.04服务器上测试)。
除了这些情况,root几乎无法做任何事情。
但是,有一种叫做内核模式(与用户模式相对)的东西。
据我所知,在健全的系统上,只有内核,内核扩展和驱动程序以内核模式运行,而其他所有内容(包括您以root用户身份登录的shell)都以用户模式运行。
因此,您可能会争辩“仅仅扎根是不够的”。但是,在大多数系统上,root用户能够加载内核模块,而内核模块又将以内核模式运行,从而有效地为root提供了一种以内核模式运行代码的方式。
但是,在某些系统(如iOS)中,这是(任意)不可能的,至少在没有充分利用安全性的前提下。这主要是由于提高了安全性,例如强制执行代码签名。
例如,iDevices的处理器内置了AES加密密钥,只能从内核模式访问。内核模块可以访问这些模块,但是这些内核模块中的代码也必须由Apple签名,以使内核能够接受它们。
在OS X上,从10.11版开始(El Capitan),还有一个所谓的“无根模式”(尽管名称具有误导性,因为root仍然存在),它实际上禁止root进行某些安装程序仍然可以执行的操作。
引用关于AskDifferent的一个很好的答案:
这是它的限制,甚至从根本上也是如此:
- 您不能在/ System,/ bin,/ sbin或/ usr中修改任何内容(/ usr / local除外);或任何内置的应用程序和实用程序。只有安装程序和软件更新才能修改这些区域,甚至只有在安装Apple签名的软件包时才可以进行修改。
gcc -o hello hello.c && chmod 400 hello && /lib64/ld-linux-x86-64.so.2 ./hello
提供预期的Hello, World!
输出,
/lib64/ld-linux-x86-64.so.2
真正的可执行文件,./hello
只是它的一个参数?因为这就像将包含PHP代码的文本文件传递给PHP解释器...或像使用bash ./my_script
... 运行bash脚本一样
您提到的“系统核心执行”处于root
的控制之下,例如通过可加载的内核模块。当然,这是假设内核支持加载内核模块,没有人可以执行甚至不可行的操作root
。
系统进程也是如此。root
允许杀死任何进程,但是在不损害内核完整性的情况下不可能停止在内核模式下运行的进程,因此立即停止此类进程根本是不可行的。请注意,root
不会拒绝杀死这些进程,杀死自身不会产生任何效果。
最后,实模式:Linux内核不支持它,因此,再也没有人能做到,甚至没有root
。
@Siguza提到了x
未经许可执行文件的情况,这对于root
用户来说是完全有可能的:
/lib/ld-linux.so.2 /path/to/executable
/proc/kmem
通过功能撤销而失去加载新内核模块(或通过进行热修补)的能力。
一个例子可能是不可变的文件的修改:您可以设置文件属性i
以chattr
使文件不可变的,甚至根。例如:
# 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
具有“ i”属性的文件无法修改:无法删除或重命名,无法创建与此文件的链接,也不能向该文件写入数据。只有超级用户或拥有CAP_LINUX_IMMUTABLE功能的进程才能设置或清除此属性。
但是,root可以轻松撤销不变性:
# chattr -i god
# rm -v god
removed ‘god’
假定来自根用户本身的协作root
可以防止访问FUSE挂载(使用allow_other
或allow_root
选项),但这是因为FUSE设计为以这种方式工作。由于FUSE驻留在虚拟层上,因此它可以基于逻辑返回它喜欢的任何错误,这与那些力求尽可能透明和精简的通用块设备模块相反,将权限委派给另一层。
这不会阻止root用户禁用该选项,或者用一个静默丢弃该选项的FUSE模块替换FUSE模块,除非您将文件系统设为只读。但是,这只会导致“看守谁的人”的情况:您如何验证系统没有在说谎?您的shell甚至可能坐在chroot中,该chroot向您显示一个合法的FUSE模块,而内核实际上正在运行它的恶意版本。
我要说的是,无法执行不可执行的文件是一个有限的限制,因为它取决于文件的权限。(可以使用/lib64/ld-linux-x86-64.so.2来处理不可执行的文件,但不能执行非执行挂载的文件来解决此问题)
还存在强制性文件锁定的问题,尽管超级用户可以杀死该进程,但是如果某个进程当前正在使用文件,则该文件将阻止文件编辑。
曾经,超级用户无法在设备繁忙时卸载该设备,但是现在可以使用惰性umount来完成。
其他限制包括:
无法修改不可变文件,并且只能追加到仅追加文件中(Linux允许超级用户在任何运行级别删除不可变且仅追加标志,但是在一定程度上破坏了它们的用途)
无法写入只读安装,或在无执行安装上执行任何操作
无法绑定不可绑定的安装
如果其块设备为只读,则无法将文件系统重新挂载为可读写
除非其他用户拥有的保险丝座上安装了allow-other或allow-root,否则无法声明任何内容
不能违反SELinux设置
系统本身固有的故意限制,这些限制会影响根:
无法直接设置文件的c时间(或生日,如果已实现)
无法以纯文本形式查看密码
root
权利,因此也没有可以剥夺的权利root
。