以下是对某个文件及其包含(父)目录的调用结果ls -l
。在下列哪种情况下,用户(student1)可以删除该文件:
A。
---------- 1 student1 student1 0 Feb 10 20:47 file1
d-wx------ 2 student1 student1 4096 Feb 10 20:47 directory1
b.
-rwx------ 1 student1 student1 0 Feb 10 20:47 file1
drw------- 2 student1 student1 4096 Feb 10 20:47 directory1
C。
-rwxrwx--- 1 student1 student1 0 Feb 10 20:47 file1
dr-x------ 2 student1 student1 4096 Feb 10 20:47 directory1
d.
-rwxrwx--- 1 student1 student1 0 Feb 10 20:47 file1
dr-xrwx--- 2 student1 student1 4096 Feb 10 20:47 directory1
有人能解释为什么正确答案是 (a) 吗?据我所知,删除时我应该查看父目录的权限,但我似乎无法理解 a、b、c 和 d 之间的区别。
答案1
请注意,在所有这些情况下,所有权都是student1
和的混合studen1
。我只是假设这是一个拼写错误,所描述的真实情况是目录和文件都归学生的用户帐户和相应的组所有,这对两者来说是一样的。
在大多数实现中,目录实际上是一种特殊类型的文件(如块设备节点或文件系统管道),其中包含逻辑上存在于其中的文件(和其他目录)列表,以及指向其自身及其父目录的指针(分别是.
和..
条目)。更改目录中的文件列表涉及更新此目录文件。
在标准 Linux 中,所有者始终可以删除自己的文件。这是所有者可以更改文件权限这一事实的合理扩展,因此即使他们最初由于文件权限而无法删除文件,他们也可以轻而易举地授予自己该权限。
但是,由于删除文件需要写入目录(以删除对该文件的引用),因此删除文件的用户必须具有该文件所在目录的写权限。
情况(a)是所有情况中唯一一个用户对目录具有写权限的情况,因此也是唯一一个用户可以删除该目录内文件的情况。
在情况 (b) 中,您无法进入目录(缺乏x
权限),因此无法对其内容执行任何操作。
在情况 (c) 中,您缺乏该目录的写权限,因此无法更改目录的内容。
案例(d)原则上可以已经成功,但由于用户权限优先于组权限,而组权限又优先于全局权限(其中每种更具体的权限类型都适用于执行操作的用户),因此用户对目录的写入权限的缺失优先于组具有写入权限。因此,由于缺乏访问权限,删除操作会失败。
考虑常规文件权限(读/写/执行)映射到目录的(有点不太明显的)方式,以及它们的含义:
r
目录的权限意味着你可以列出文件,因为它允许读取目录文件w
目录上的权限意味着您可以添加、编辑和删除目录条目,因为它允许写入目录文件x
目录上的权限意味着您可以进入目录,从而允许您访问目录条目假设你知道它的名字,因为原因(并且需要某种方式来表达进入目录的能力)