it-swarm.cn

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

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

168
Ken Li

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

因此,例如,要访问_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_运行Shell脚本或需要访问_/lib_的动态链接二进制文件,因此您需要更深入地实践使用,例如_setfacl -m user:joe:0 /*; setfacl -d user:joe /bin /lib_)。

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

195

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

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

我得到这个:

$ cat: ./rootfolder/childfile: permission denied
34
goovim

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

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

drwxr-sr-x

子目录

drwxrwsr-x

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

4
Kemin Zhou

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

$ ln foo/bar/test_privs privs_test_checking
1
Kamal