如果用户无权访问父目录,他是否可以访问文件?

如果用户无权访问父目录,他是否可以访问文件?

如果我有一个具有以下权限的文件夹(0700):

drwx------  2 patrick patrick   4096 Sep 12 00:00 test

如果我理解正确的话,这意味着只有文件夹所有者可以:

  • 阅读:列出文件
  • write:创建、删除和重命名文件(但这仅在设置了execute时才有效)
  • 执行:访问文件内容和元信息

如果我现在将文件添加到具有权限 (0777) 的文件夹中:

-rwxrwxrwx  1 patrick patrick    0 Sep 12 00:00 testfile

即使文件本身可以被所有用户读取、写入和执行,其他用户也无法访问该文件。我是正确的还是遗漏了 Unix 权限系统的一些细节?

如果我是正确的,是否有任何理由(除了保持一切整洁)仍然担心该文件夹中的正确文件权限?是否存在其他用户仍然可以访问该文件的情况(例如通过相对路径访问?)?

答案1

r意味着您可以读取目录或文件本身。目录上的x表示可以遍历该目录。

通过在问题中设置权限的方式,帕特里克以外的用户和组无法进入该目录或列出其内容。它们可以ls直接在目录的内容上运行,但它只会返回permission denied而不提供任何信息。

如果您x只授予目录权限,则他们可以cd进入目录。如果他们ls在目录内运行,则将授予他们权限,permission denied但如果他们知道或可以猜出其中文件的名称,则他们可以直接在它们上运行并查看它们是否存在。如果他们对文件具有读取权限,他们还可以使用或其他文本编辑器ls读取文件的内容。catvim

如果您授予r目录权限而不授予其他任何权限,则用户无法cd进入该目录,但他们可以ls在该目录上运行并查看其内容,尽管他们无法ls针对文件本身运行或使用catvim查看其内容。

答案2

文件可以在其他地方硬链接(在 Linux 上,在其他地方绑定安装),这将绕过包含原始目录的权限:

# mkdir dir; echo yup > dir/in
# ln dir/in out
# touch out-b; mount --bind dir/in out-b
# chmod 700 dir
# su user

user$ cat out out-b
yup
yup
user$ cat dir/in
cat: dir/in: Permission denied
user$ ls dir/in
ls: cannot access 'dir/in': Permission denied
user$ ls dir
ls: cannot open directory 'dir': Permission denied

由于这样的硬链接或绑定安装可能会无意中发生(作为其他东西的一部分等)绝不授予不必要的权限是个好主意。

drwx------ 2 patrick patrick 4096 Sep 12 00:00 test

如果我理解正确的话,这意味着只有文件夹所有者可以:

执行:访问文件内容和元信息

不,x目录的(执行/搜索)权限并不意味着这一点。这意味着只有所有者才能通过该目录的条目访问文件。访问文件内容由它们控制自己的权限。

相关内容