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

评论

请注意,将目录更改为600甚至使所有者无法访问它,因为您需要chdir的执行权限才能进入该目录...

#1 楼

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

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

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

符号链接不会改变任何内容。内核使用调用进程的访问权限来遍历它们。例如,如果cd /foo/bar是指向目录sym的符号链接,则需要对dir的执行权限才能访问dir。根据操作系统和文件系统的不同,symlink本身的权限可能无关紧要(有的尊重它们,有的忽略它们)。

从根目录中删除执行权限实际上将用户限制为目录树(必须将特权树更改为该树)。这要求可以使用访问控制列表。例如,如果sym/foo//homejoe)的禁区,而setfacl -m user:joe:0 / /home/home/joe的主目录,则joe将无法访问系统的其余部分(包括运行带有joe的shell脚本或动态链接的二进制文件)需要访问/bin/sh,因此您需要更深入地进行实际使用,例如/lib)。

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

#2 楼

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

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


我明白了:

$ cat: ./rootfolder/childfile: permission denied


#3 楼

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

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

drwxr-sr-x


子目录

drwxrwsr-x


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

#4 楼

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

$ ln foo/bar/test_privs privs_test_checking