linux - 理解 Linux 目录权限推理

标签 linux unix permissions directory

您好,我有 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/

相关文章:

unix - 有没有更简单的方法可以在GNU screen 上发送ENTER键?

android - 如何检查用户是否在运行时在 Android 上授予了权限?

ios - 授予相机访问权限时出现 BSMachError

android - Facebook 权限审查问题和不同的 hashkey/google play 包名称

sql-server - cakephp、linux 和 mssql

linux - 如何区分带有 DOS 换行符的文件和 shell 脚本

linux - Bash 解析和 shell 扩展

unix - awk/sed : replace all fields if any field matches a pattern

c++ - 用于 linux C++ 的 HTTP 解析库

c - OS X 是 Linux 可执行文件 "compatible"吗?