这里提到的所有文件名都是目录。
的权限/media/disk
是0744
( drwxr--r--
)。的权限/media/disk/directory
是0755
( drwxr-xr-x
)。无论如何,我不拥有这些目录。
为什么我可以ls /media/disk
,但不可以ls /media/disk/directory
?我的猜测是ls
需要运行访问/media/disk
,但这很愚蠢,因为如果我对文件具有读取访问权限(即如果r
设置了),那么我应该能够读取该文件。
除了上面的问题之外,如果我正确地说问题是由于缺乏运行访问权限造成的,那么我想问为什么我说的很愚蠢,不是。
系统信息:
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.2 LTS"
我认为提议的重复项并不能解释为什么这个功能并不愚蠢。
答案1
您的/media/disk
目录缺少执行位对于团体和“其他”。
这意味着(恕我直言,以一种有点令人困惑的方式)你可以成功读从目录(如读位已设置)并列出其内容,而您不能行为在其上也不进入它(通过cd
),这包括只要权限掩码为 就列出其子级内容744
。
如果你想访问某些特定的子目录(-ies)没有提供对整棵树的访问,那么这是一个简单的问题去除读取访问权限但是环境执行位:
$ su
# mkdir -p /tmp/parent/child
# chmod 711 /tmp/parent/
# chmod 755 /tmp/parent/child/
# touch /tmp/parent/child/test
# exit
$ ls /tmp/parent/
ls: cannot open directory '/tmp/parent/': Permission denied
$ cd /tmp/parent/
$ pwd
/tmp/parent
$ ls
ls: cannot open directory '.': Permission denied
$ ls child/
test
答案2
愚蠢很大程度上是基于意见的,但请考虑一下,要求对路径上的所有目录具有“执行”权限意味着可以通过拒绝访问该子树的根目录来拒绝对该子树的访问。“执行中”目录似乎没有多大意义,因此该x
位可能更好地称为“使用权”对于目录。
换句话说,通过设置 的权限/home/$USER
(700
即rwx------
),我们可以确保没有其他用户可以访问该文件,$USER
即使他们或他们使用的某些程序意外地在其主目录中创建了具有更自由权限的文件。只有一个地方可以检查,而不是每个文件。