在访问子目录时,父目录的权限是否重要?


159

如果我有一个具有某些限制权限的根文件夹,比方说600,并且如果子文件夹/文件具有777权限,那么即使根文件夹有600,每个人都可以读取/写入/执行子文件吗?


12
请注意,将目录更改为600甚至使所有者也无法访问它,因为您需要chdir的执行许可权...
Shadur 2011年

Answers:


183

精确的规则是:只有在您具有目录执行权限的情况下,您才能遍历目录。

因此,例如访问dir/subdir/file,您需要执行权限dirdir/subdir,再加上权限,file您要访问的类型。进入极端情况时,我不确定是否普遍需要您在当前目录上具有执行权限才能通过相对路径访问文件(在Linux上也是如此)。

访问文件的方式很重要。例如,如果您具有的执行权限,/foo/bar但没有的执行权限/foo,但是当前目录为/foo/bar,则可以/foo/bar通过相对路径(而不是绝对路径)访问文件。/foo/bar在这种情况下,您无法更改为;可能cd /foo/bar在没有特权之前已经完成了特权更高的过程。如果文件具有多个硬链接,则用于访问该文件的路径将确定访问限制。

符号链接不变。内核使用调用进程的访问权限来遍历它们。例如,如果sym是目录的符号链接,则dir需要dir具有访问权限sym/foo。根据操作系统和文件系统的不同,对符号链接本身的权限可能重要,也可能无关紧要(有些人尊重它们,有些人忽略它们)。

从根目录中删除执行许可有效地将用户限制在目录树的一部分(必须将特权更高的进程更改为该目录树)。这要求可以使用访问控制列表。例如,如果//homejoesetfacl -m user:joe:0 / /home)的限制,并且/home/joejoe的主目录,joe则将无法访问系统的其余部分(包括运行带有/bin/sh需要访问权的二进制脚本或动态链接的二进制脚本/lib,因此您需要d需要更深入地进行实际使用,例如setfacl -m user:joe:0 /*; setfacl -d user:joe /bin /lib)。

目录的读取权限赋予枚举条目的权利。在没有授予读取权限的情况下授予执行权限有时会很有用:条目名称用作访问它们的密码。我想不给没有执行权限的目录读写权限有什么用。


32

否。根文件夹权限限制子文件权限。你可以试试。

$ mkdir rootdir
$ touch ./rootdir/childfile
$ chmod 777 ./rootdir/childfile
$ chmod 600 rootdir
$ cat ./rootdir/childfile

我得到这个:

$ cat: ./rootfolder/childfile: permission denied

4

您可以使子目录可写,即使父目录也不可写。我这样做是为了团体。

例如:父目录归组编码者所有

drwxr-sr-x

子目录

drwxrwsr-x

您(编码器组的任何成员)仍然可以写入子目录,但不能写入父目录。


1

即使您没有父目录的执行特权,也可以创建硬链接来访问文件。但是要注意的是,在失去对父目录的执行特权之前,您必须创建硬链接

$ ln foo/bar/test_privs privs_test_checking
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.