Answers:
精确的规则是:只有在您具有目录执行权限的情况下,您才能遍历目录。
因此,例如访问dir/subdir/file
,您需要执行权限dir
和dir/subdir
,再加上权限,file
您要访问的类型。进入极端情况时,我不确定是否普遍需要您在当前目录上具有执行权限才能通过相对路径访问文件(在Linux上也是如此)。
访问文件的方式很重要。例如,如果您具有的执行权限,/foo/bar
但没有的执行权限/foo
,但是当前目录为/foo/bar
,则可以/foo/bar
通过相对路径(而不是绝对路径)访问文件。/foo/bar
在这种情况下,您无法更改为;可能cd /foo/bar
在没有特权之前已经完成了特权更高的过程。如果文件具有多个硬链接,则用于访问该文件的路径将确定访问限制。
符号链接不变。内核使用调用进程的访问权限来遍历它们。例如,如果sym
是目录的符号链接,则dir
需要dir
具有访问权限sym/foo
。根据操作系统和文件系统的不同,对符号链接本身的权限可能重要,也可能无关紧要(有些人尊重它们,有些人忽略它们)。
从根目录中删除执行许可有效地将用户限制在目录树的一部分(必须将特权更高的进程更改为该目录树)。这要求可以使用访问控制列表。例如,如果/
和/home
是joe
(setfacl -m user:joe:0 / /home
)的限制,并且/home/joe
是joe
的主目录,joe
则将无法访问系统的其余部分(包括运行带有/bin/sh
需要访问权的二进制脚本或动态链接的二进制脚本/lib
,因此您需要d需要更深入地进行实际使用,例如setfacl -m user:joe:0 /*; setfacl -d user:joe /bin /lib
)。
目录的读取权限赋予枚举条目的权利。在没有授予读取权限的情况下授予执行权限有时会很有用:条目名称用作访问它们的密码。我想不给没有执行权限的目录读写权限有什么用。