澄清有关Linux目录权限的内容

我几乎惭愧地承认,当涉及到文件权限时,有一件事我仍然不确定。

假设我有一个具有750权限的目录(drwxr.x …)。 然后,我用一个相当普通的644权限(.rw.r..r ..)创build了一些后代文件。

该目录中的文件是否可以被系统上的任何其他用户(其所有者或组之外)读取?为什么? 一方面,这些文件有一个世界可读的位,所以应该表明该文件是任何人都可读。 另一方面,上游目录不是世界可执行的(也不可读),只要这阻止了对目录内容的访问,文件上的世界可读位将是不相关的。 这是完全正确的还是有没有解决方法呢?

现在,我似乎经常看到有人推荐chmod -R o-rwx或其他东西的情况。 例如,在Debian的Maildir目录下创build的后缀我相信 – 所有的文件,不仅仅是目录,世界/组阅读删除。 如果目录没有世界访问权限,是否真的有必要从文件中删除这个世界读取位? 我问,因为我试图计划如何设置服务器上的/ var / www,并让它不是世界上可读的,即其他本地用户。

是的,文件可以被读取,因为它们是世界可读的,但是如果目录不是世界可读的,假设用户不在组中拥有目录,则用户需要另一个链接到文件。 例如:

cd directory ln file /tmp 

现在用户可以访问文件,但是必须使用/ tmp / file来完成。

你所要求的更多与虚拟文件系统执行目录遍历的方式有关。 由于Linux系统上的所有内容都是文件,所以在处理目录时会产生一个特殊的问题。 虽然他们有一个执行字段,但试图执行一个目录是没有意义的。 而且,在ext2 / 3/4文件系统中,所使用的数据结构与“真”文件几乎没有什么相似之处。 相反,这些权限在应用于目录时具有稍微不同的含义。

  • 读 – 允许指定打印所有目录条目的列表
  • 写 – 指定被允许创build新的目录条目
  • 执行 – 指定者可以获取目录条目的inode

了解这些区别,我们可以看到,如果用户对特定目录的权限是--x那么我们可以确定用户有权允许尝试文件访问,但实际上却不能实际查看目录条目本身。 或者更简洁地说,根据coredump,“-x你不能列出目录,但是如果文件权限允许,你可以读取里面的文件。”

了解所有这些,让我们以文件/home/user/public/file为例。 一般来说,不应该在全球范围内打开他们的主目录,但是他们希望在全球范围内提供“公共”文件。 因此,您应该这样设置权限:

  • /home – 755
  • /home/user – 711(或可能是751)
  • /home/user/public – 755

不,他们不能。 文件的所有path树也必须可访问。

[有可能创build目录,你看不到的内容,但你仍然可以读取文件; 即隐藏文件的目录,但不像0750权限那样在你的例子中]

尽pipe创build所有的文件和目录基于你想要如何访问它是安全的。 如果您将该文件从现有目录移出到具有世界可读性的文件,那么突然您以前认为“受保护”的文件将不会被使用。 如果你的文件权限也是o-rwx,那么这个文件将被自己保护,不会依赖目录来保护它。

这种行为很容易testing自己。

 $ mkdir foo $ echo readable > foo/bar $ ls -ld foo/ drwxr-xr-x 2 sciurus sciurus 4096 2011-03-22 1329 foo/ $ ls -l foo/ total 4 -rw-r--r-- 1 sciurus sciurus 9 2011-03-22 13:29 bar $ cat foo/bar readable $ chmod ar foo $ ls -ld foo/ d-wx--x--x 2 sciurus sciurus 4096 2011-03-22 1329 foo/ $ ls -l foo/ ls cannot open directory foo/: Permission denied $ cat foo/bar readable $ chmod a+r foo $ chmod ax foo $ ls -ld foo/ drw-r--r-- 2 sciurus sciurus 4096 2011-03-22 1329 foo/ $ ls -l foo/ ls cannot access foo/bar: Permission denied total 0 -????????? ? ? ? ? ? bar $ cat foo/bar cat foo/bar: Permission denied