如果我有一个具有以下权限的文件夹(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
读取文件的内容。cat
vim
如果您授予r
目录权限而不授予其他任何权限,则用户无法cd
进入该目录,但他们可以ls
在该目录上运行并查看其内容,尽管他们无法ls
针对文件本身运行或使用cat
或vim
查看其内容。
答案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
目录的(执行/搜索)权限并不意味着这一点。这意味着只有所有者才能通过该目录的条目访问文件。访问文件内容由它们控制自己的权限。