您好,我有 2 个关于 linux 目录权限的问题,我不明白。
我从名为 Documents 的文件夹中删除了执行标志。在那之后我不能在它上面使用 cd 但我仍然可以从父目录执行“ls Documents”并且它仍然列出了 Documents 目录中的文件。 我虽然缺少 x 标志拒绝读取此目录?
然后我想知道为什么要发明目录上的粘滞位。我听说它被用来让用户无法删除其他用户创建的临时文件。但是这个 IMO 违反了删除文件的规则,我们只需要这个目录的权限。为什么不简单地给每个用户一个单独的/tmp/目录,而不是在规则系统中引入异常(exception)? 我知道这面旗帜的作用,但我想知道发明它的原因。
最佳答案
执行位:遍历目录需要执行位。 读取目录的权限由读取位控制。
有关此差异的示例,请参阅此 shell 对话框:
作为根用户:
# find foo/ -ls drwxr-xr-- 3 root root 4096 Apr 27 12:57 foo/ drwxr-xr-x 2 root root 4096 Apr 27 12:57 foo/bar -rw-r--r-- 1 root root 0 Apr 27 12:57 foo/bar/file
作为用户:
$ ls foo/ bar $ find foo/ -ls drwxr-xr-- 3 root root 4096 Apr 27 12:57 foo/ find: foo/: Permission denied $
但通常的用法是相反的:删除读取权限但允许遍历,例如通过设置 --x
允许 Web 服务器进入 ~/public_html 但不允许它执行默认索引列表。
Sticky bit: 这正是为了避免目录内删除的默认规则而发明的,因此 /tmp
可以正常工作。 /tmp
可能驻留在与 /home
不同的卷上和/或受不同配额的约束。
FHS codifies /tmp “对于需要临时文件的程序”,而“[他们] 不得假定/tmp 中的任何文件或目录在调用之间保留”。
就我个人而言,我认为/tmp 是异教徒时代的遗产,当时 vi globals.h && make install
被认为是一个安装程序。现在的程序应该遵循 $TMPDIR
,它应该指向一个用户私有(private)的系统管理目录,至少在重新启动时应该清除该目录。甚至像 tmpfile(3) 这样的标准化函数不规定实际路径。虽然似乎很重要compatibility and security concerns speaking for /tmp .不过请注意,最后一封邮件是 1999 年的,因此此后情况可能有所变化。
关于linux - 理解 Linux 目录权限推理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/790686/