我今天遇到这个例子,我想知道如何可靠的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 .
现在我不是一个Linux操作系统专家,所以我毫不怀疑,有人在那里会向我解释,从操作系统的angular度来看,这是完全合乎逻辑的。 但是,我的问题仍然存在,是否有可能愚弄,而不是黑客,操作系统让你查看文件/ inode信息,你不应该? 如果我发出命令chmod 0000 fooledYa ,如果一个有经验的程序员可以find一些读取文件的方法,比如fooledYa/ohReally/foo.txt怎么办?
$ ls -lhd fooledYa/ d-wx------ #snip
首先,我可以写入目录(创build新条目),然后执行( cd )到目录。 不过,我无法读取目录。 这意味着不直观。
当你在Unix系统中使用目录时,目录指向inode ,它们与指针条目不同。 能够跟踪目录树下的引用由eXecute位控制。 对于树中的每个目录级别,操作系统在下降到下一级之前检查执行位。
同时, Read位控制访问inode的内容。 您可以在文件系统上引用的所有内容都是inode条目。 目录或文件,他们指向一个inode。
ls -ldi fooledYa/ 121100226 d-wx------ #snip
在这种情况下,目录inode是121100226.读取权限告诉我是否可以访问用户空间中的inode文件来读取其内容。 目录inode的内容是对其他文件的引用。 内核可以随时读取。 你作为一个用户是由内核的决定所控制的。
因此,由于ls试图读取内容来告诉我有什么(由Read标志检查),它被拒绝。 因为我仍然拥有eXecute权限,但是,如果我想要的文件上的目录都允许我执行,那么内核将允许我遍历我指定的文件,而不pipe我是否可以读取它们以查看引用。
因此,要总结目录,请将执行视为主权限。 没有它,你不能进入目录做任何事情。 之后,把它们想象成两列文件。 如果您有读取权限,您可以看到条目。 如果您有写入权限,则可以添加或删除条目。 如果您缺less这两个权限但已执行,则可以引用列表中的条目,但不能读取列表。
这是inode的一个很好的例子,以及它们如何表示磁盘引用上的目录引用和文件块: http : //teaching.idallen.com/dat2330/04f/notes/links_and_inodes.html
我相信愚弄你的具体事情是每个下面的目录至less有两个链接:目录的父项和子项. 在内部(加上从子目录的任何..链接)。 当你inputls -ld . 它正在看. 链接到当前目录(您有权读取),而不是从父目录(您没有权限读取)的当前目录的链接。
对于+ x,我发现理解它如何在目录上工作的最简单的方法是“进入”目录的权限。 即使您有读写访问权限,也无法进入没有+ x的目录。 如果不允许进入目录,那么无论是否设置了+ x,都不能进入子目录。 所以,如果你有fooledYa/ohReally/foo.txt和fooledYa是chmod 0000,假设没有其他的ACL系统覆盖文件模式,只有root才能进入ohReally/或者打开foo.txt即使他们知道path到文件而不必列出目录内容。
关于这些权限的一个奇怪的事情是,如果目录是+ r而不是+ x,你有权限读取目录内容,这样你就可以从外面“偷看”并读取目录中的文件列表, x您将无法进入目录访问( stat )单个文件。 因此,如果您尝试使用ls -l这样的目录,您将获得文件名,但所有其他字段的文件大小,模式,所有权等将是? 分数。
正如你预料的那样,很多人已经解释了你的例子是如何完美的。 “按devise工作”
要回答你的问题, 如果你能够愚弄操作系统让你查看你不应该看到的文件/ inode信息 , 那将是一个令人震惊的内核错误。 文件权限与inode本身相关联,并在您实际尝试打开文件时应用。 如果你没有从其他答案中提取出来,我会指出一个目录有一个inode,就像任何文件一样,只是这个权限意味着在应用到目录时会有一些(或者)很大的不同)。
文件权限是最初的Unix安全机制,并且仍然是Unix / Linux安全性的一个组成部分。 任何情况下,你可以做的,看起来像你已经愚弄了系统几乎肯定是你不明白什么是正确的行为。 如果你发现了一种绕过安全的合法方式,即使是在黑客中,它也会被认为是一个重要的安全漏洞,并且是打补丁的最高优先级之一。
例如,如果你能够读取一个你不应该读的文件的内容,你可以窃取所有用户的(散列)密码和系统的专用ssh密钥以及私钥系统中的每个人(尽pipe希望这些会被encryption),并通过设备inode读取系统内存的全部内容(等等)。 如果你可以读取你不应该的文件信息,那么危险性就会降低,但这仍然是一个重大的漏洞。