puk*_*puk 6 linux permissions file-permissions
我今天遇到了这个例子,我想知道 Linux 文件权限对于隐藏信息有多可靠
$ mkdir fooledYa
$ mkdir fooledYa/ohReally
$ chmod 0300 fooledYa/
$ cd fooledYa/
$ ls
>>> ls: cannot open directory .: Permission denied
$ cd ohReally
$ ls -ld .
>>> drwxrwxr-x 2 user user 4096 2012-05-30 17:42 .
Run Code Online (Sandbox Code Playgroud)
现在我不是 Linux 操作系统专家,所以我毫不怀疑有人会向我解释从操作系统的角度来看这是完全合乎逻辑的。但是,我的问题仍然存在,是否有可能欺骗而不是破解操作系统让您查看您不应该查看的文件/inode 信息?如果我发出了命令chmod 0000 fooledYa,有经验的程序员能否找到一些方法来读取文件,例如fooledYa/ohReally/foo.txt?
Jef*_*and 14
$ ls -lhd fooledYa/
d-wx------ #snip
Run Code Online (Sandbox Code Playgroud)
第一件事是:我可以写入目录(创建新条目),并且可以cd对目录执行 ( )。但是,我无法读取目录。这意味着什么并不直观。
当您在 Unix 系统中处理目录时,目录指向inodes,这与指针条目不同。能够在目录树中跟踪引用是由eXecute位控制的。对于树中的每个目录级别,操作系统在下降到下一个级别之前检查执行位。
同时,该Read位控制对inode 内容的访问。您可以在文件系统上引用的所有内容都是一个 inode 条目。目录或文件,它们指向一个 inode。
ls -ldi fooledYa/
121100226 d-wx------ #snip
Run Code Online (Sandbox Code Playgroud)
在这种情况下,目录 inode 是 121100226。读取权限告诉我是否可以在用户空间访问该 inode 文件以读取其内容。目录 inode 的内容是对其他文件的引用。内核总是可以读取的。作为用户,您受内核关于其中条目的决定的控制。
因此,由于ls尝试读取内容以告诉我那里有什么(由Read标志检查),因此被拒绝。eXecute然而,由于我仍然有权限,内核将允许我遍历我指定的文件,如果我想要的文件上方的目录都允许我eXecute进入它们,无论我是否可以读取它们以查看参考。
因此,总结目录,将执行视为主权限。没有它,你就不能进入目录做任何事情。之后,将它们视为两列文件。如果您有阅读权限,则可以查看条目。如果您有写权限,您可以添加或删除条目。如果您缺少这两个权限但具有执行权限,则可以引用列表中的条目,但无法读取列表。
这是一个很好的 inode 示例以及它们如何表示磁盘引用上的目录引用和文件块:http : //teaching.idallen.com/dat2330/04f/notes/links_and_inodes.html