我创建了一个具有这些权限的目录 - 另一个用户具有
drwxr--r-- 5 用户 用户 4096 2012-09-15 19:30 网站
什么时候以另一个用户身份在目录上执行 ls -l
ls -l /home/用户/站点
这是目录输出。我认为如果没有在该目录上设置 x 位,文件名根本不会显示。
d????????? ? ? ? ? ? dev.user.com
-????????? ? ? ? ? ? user.20120914_082804.sql.gz
d????????? ? ? ? ? ? shared
-????????? ? ? ? ? ? shared.tar.gz
-????????? ? ? ? ? ? www.20120914_083256.tar.gz
d????????? ? ? ? ? ? www.user.com
这里有一些不一致吗?
x
授予您实际进入目录并访问目录中文件的r
权限,授予您查看目录内容的权限。如果您通过为目录提供
x
位并删除r
位来扭转这种情况,那么用户可以打开shared.tar.gz
(假设对文件本身有适当的权限)但前提是他事先知道文件名,因为ls
无法列出目录中的文件.这种对权限的解释可以追溯到早期的 Unix 文件系统。一开始,只有文件。(好吧,还有设备、管道,还有……但我想在这里讲一个故事,并不是 100% 严格准确;此外,对于设备、管道和其他一切都是如此,因为一切都是文件,甚至目录)。
目录只是文件系统用来保存描述目录树及其包含的文件的元数据的文件。目录中的每个文件都由一个简单的数据结构描述,其中包含文件名空间(最初为 14 个字符,IIRC)以及存储数据的索引节点号、文件大小、时间戳和权限字.
.
每个目录都以名为and的两个条目开头..
,第一个指向该目录的索引节点,第二个指向其父目录的索引节点。权限字有九位来描述所有者、同一组的其他成员和世界的待遇。每个标记相关用户是否可以读取、写入或执行文件的三位。(您可能会注意到我忽略了 16 位权限字中的另外 5 位。这些最终确实得到了分配的含义,但这与故事的这一部分无关。)(另外,这九位的解释位在早期 Unix 的所有后代中几乎保持不变,包括 Linux。)
所以,如果一个目录真的只是一种特殊的文件并且由某个目录中的条目描述,那么它显然也有权限位,而这些位可能意味着什么。但问题是,究竟是什么。为这些位分配含义的最简单方法是首先不要更改它们的含义。这基本上就是所做的。
因此,读取位意味着用户可以读取目录本身。这通常让读者可以访问每个文件数据的文件名、时间戳、大小和索引节点号。具体来说,使用
r
set 可以ls
查看目录中所有文件的名称,但这不足以打开(或以任何方式使用)任何列出的文件。执行位表示用户可以“执行”该目录。由于目录很特殊,执行实际上意味着按名称查找条目并使用它。这意味着您可以尝试打开文件(如果
x
已设置),但如果没有设置,r
您将无法发现它们的名称。当然,所请求文件的权限也会影响访问,因此即使x
在目录上,您也无法读取文件,除非它也为您提供r
.写入位意味着用户可以写入目录,但自然只能由文件系统本身进行调节。这意味着
w
您可以使用 set 在该目录中创建新文件,或编辑现有文件的目录条目。但是没有x
设置,你实际上不能使用任何文件,没有r
你也看不到它们。随着更复杂的用户身份模型在 Unix 及其后代中得到发展,这些相同的基本描述已设法保持显着不变。
简而言之,
r
意味着你可以看到它的内容,x
意味着你可以使用它,w
意味着你甚至可以对目录进行修改。