因此,作为 root,当我尝试在没有读取权限的情况下 cat 一个文件时,我仍然可以看到其中的内容,这看起来有点奇怪,因为作为 root,我无法在没有 w 权限的情况下写入文件(它以只读方式打开) )并且没有 x 权限我无法执行文件。
难道我做错了什么?
[root@aaaaaa enc]# ll logsuper
--w-------. 1 root root 3268 Apr 19 13:26 logsuper
[root@aaaaaa enc]# head logsuper
Done at Fri Apr 19 12:22:02 UTC 2019
如果没有 root 的 x 权限也无法执行文件:
[root@aaaaaa enc]# ll test1
----------. 1 root root 25 Apr 19 13:40 test1
[root@aaaaaa enc]# cat test1
#!/bin/bash
echo "${1}"
[root@aaaaaa enc]# ./test1 asdfasdasgasga
bash: ./test1: Permission denied
答案1
可以root
做任何事情并且绕过权限测试。
另请阅读有关设定值。
由于程序 -head
甚至是 shell,即使由root
(其 uid 根据定义为 0)运行时 - 使用系统调用(在系统调用(2)...)
也可以看看路径分辨率(7)和能力(7)和凭证(7)。他们一起解释什么时候打开(2)- 由过程运行 /usr/bin/head
- 将失败。顺便提一句,阅读(2)不检查权限。
请注意,某些可执行文件的执行是通过执行(2)哪些文件可能会失败。你的 shell 正在做很多事情叉子(2)并execve
致电。
一本不错的Unix编程书,比如老的碱性磷酸酶,有几个章节解释了这一切。你的壳只是另一个程序(另请参阅Unix哲学)并且您可以用 C 编写一个 shell(或者研究现有的自由软件 shell 程序的源代码,例如GNU bash)。