$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 .
现在我不是Linux操作系统专家,所以我毫不怀疑那里有人会向我解释,从操作系统的角度来看,这是完全合乎逻辑的.但是,我的问题仍然存在,是否有可能愚弄而不是黑客操作系统让你查看你不应该查看的文件/ inode信息?如果我发出命令chmod 0000 fooledYa,有经验的程序员可以找到一些关于读取文件的方法,例如fooledYa / ohReally / foo.txt怎么办?
解决方法
@H_403_9@$ls -lhd fooledYa/ d-wx------ #snip
首先是第一件事:我可以写入目录(创建新条目),然后我可以执行(cd)到目录.但是,我无法读取该目录.这意味着什么并不直观.
在Unix系统中使用目录时,目录指向inodes,这与指针条目不同.能够跟踪目录树中的引用是由eXecute位控制的.对于树中的每个目录级别,操作系统在下降到下一级别之前检查执行位.
同时,Read位控制访问inode的内容.您可以在文件系统上引用的所有内容都是inode条目.目录或文件,它们指向一个inode.
ls -ldi fooledYa/ 121100226 d-wx------ #snip
在这种情况下,目录inode是121100226.读取权限告诉我是否可以访问用户空间中的inode文件以读取其内容.目录inode的内容是对其他文件的引用.内核总能读取它.作为用户,您可以通过内核关于其中条目的决策来控制.
因此,因为ls试图读取内容以告诉我那里有什么(由Read标志检查),它被拒绝.但是,由于我仍然拥有eXecute权限,内核将允许我遍历我指定的文件,如果我想要的文件上面的目录都允许我执行它们,无论我是否可以读取它们以查看引用内容.
因此,要总结目录,请将执行视为主权限.没有它,您无法进入目录来执行任何操作.之后,将它们视为两列文件.如果您具有读取权限,则可以查看条目.如果您具有写入权限,则可以添加或删除条目.如果您缺少这两个权限但已执行,则可以引用列表中的条目,但无法读取列表.
这是inode的一个很好的说明性示例,以及它们如何表示磁盘引用上的目录引用和文件块:http://teaching.idallen.com/dat2330/04f/notes/links_and_inodes.html