以下是机器上授予的权限:
drwxrwxrwx 4 root root 512 May 16 09:32 STC_10
drwxrw-rw- 4 root root 512 May 5 11:22 STC_11
现在问题是:
cd STC_11
-bash: cd: STC_11: Permission denied
但这个有效:
-bash-4.0$ cd STC_10
-bash-4.0$ ls
Codemgr_wsdata src
为什么我们需要执行权限才能访问该目录STC_11
?读写权限不够吗?
命令ls
即可STC_11
起作用。
答案1
为了以下演示,我创建了几个目录:
$ mkdir read_only
$ mkdir exec_only
$ mkdir r_e
$ touch read_only/cant_open
$ echo foo > read_only/cant_open
$ echo bar > exec_only/cant_find
$ echo baz > r_e/normal
$ chmod 400 read_only/
$ chmod 100 exec_only/
$ chmod 500 r_e/
读取权限足以列出目录的内容:ls(1)
找不到细节有关文件的信息,但它可以告诉您文件的名称。
$ ls read_only/
ls: cannot access read_only/cant_open: Permission denied
cant_open
但只读访问权限不允许你横穿目录:
$ cat read_only/cant_open
cat: read_only/cant_open: Permission denied
执行权限足以遍历目录(包括cd
),但不能列出内容:
$ ls exec_only/
ls: cannot open directory exec_only/: Permission denied
即使无法获取目录中的文件列表,您仍然可以遍历该目录:
$ cat exec_only/cant_find
bar
读取和执行权限均按预期工作:
$ ls r_e
normal
$ cat r_e/normal
baz
虽然一开始你会感到困惑,因为你有权限列出目录中的文件,但却不能做任何与它们有关的事情,而且获得许可也令人困惑做用文件来做事,但不能列出它们,这是 Unix 传统的一部分,用简单的机制来做聪明的事情:仅这两个元素就很容易实现基于能力的安全。如果我要在目录中放置几千个文件,但只想一些人们阅读为他们准备的文件,我可以轻松选择不可猜测的文件名,并在人们给我钱阅读文件时提供文件名。:)
或者,也许你有十几个客户,你希望他们都能访问为他们准备的文件目录。如果你将所有客户信息放在一个只有执行权限的目录中,他们就永远无法确定你的其他客户,除非他们已经知道另一个人是客户。
答案2
根据定义,目录的“x”权限具有特殊含义 - 它意味着您有权“cd”进入其中。
答案3
权限x
不仅仅意味着“执行”。这取决于它应用在哪里。对于文件,它授予执行文件的权限。对于目录,它授予更改目录的权限。我认为这与文件系统的结构没有太大关系。