澄清一些关于 Linux 目录权限的问题

tho*_*ter 5 linux filesystems permissions

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

假设我有一个具有 750 权限的目录(drwxr.x ...)。然后我在其中创建了一些具有相当常见的 644 权限 (.rw.r..r..) 的后代文件。

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

现在,我似乎经常看到有人推荐 chmod -R o-rwx 之类的例子。例如,我相信在 Debian 的 Maildir 目录中由 postfix 创建 - 所有文件,而不仅仅是目录,都已经删除了 world/group read。如果目录没有世界访问权限,是否真的有必要从里面的文件中删除那个世界读取位?我问,因为我正在尝试计划如何在服务器上设置 /var/www 并且让它不是世界可读的,即其他本地用户。

Sco*_*ack 10

您要问的更多与虚拟文件系统执行目录遍历的方式有关。由于 Linux 系统上的所有内容都是文件,因此在处理目录时会产生特殊性。虽然它们有一个执行字段,但尝试执行目录是相当没有意义的。此外,在 ext2/3/4 文件系统中,所使用的数据结构与“真实”文件几乎没有相似之处。相反,权限在应用于目录时的含义略有不同。

  • read -- 允许指定打印所有目录条目的列表
  • write -- 允许指定者创建新的目录条目
  • execute -- 允许指定获取目录项的inode

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

知道了所有这些,让我们以文件/home/user/public/file为例。通常不应该全局打开他们的主目录,但是他们希望在全局“公共”中提供文件。因此,您应该这样设置权限:

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


Jef*_*ffG 3

是的,可以读取文件,因为它们是世界可读的,但如果目录不是世界可读的,假设用户不属于拥有该目录的组,则用户将需要另一个指向该文件的链接。例如:

cd directory
ln file /tmp
Run Code Online (Sandbox Code Playgroud)

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