在我的 CMS 中,我注意到目录需要+x
设置可执行位 ( ) 以便用户打开它们。为什么读取目录需要执行权限,Linux 中的目录权限如何工作?
答案1
在 Linux 上对目录应用权限时,权限位与常规文件具有不同的含义。
- 这读位(
r
) 允许受影响的用户列出目录中的文件 - 这写位(
w
) 允许受影响的用户创建、重命名或删除目录中的文件,以及修改目录的属性 - 这执行位(
x
) 允许受影响的用户进入该目录,并访问其中的文件和目录 - 这粘性位(
T
,或者t
如果为其他设置了执行位)表示该目录中的文件和目录只能由其所有者(或根)删除或重命名
答案2
首先想一想:什么是目录?它只是其中的项目(文件和其他目录)的列表。所以:目录=名称列表。
读位= 如果设置,您可以阅读此列表。因此,例如,如果您有一个名为poems
:
- 您可以获得
ls poems
并且您将获得其中包含的物品列表(-l
不会透露任何细节!)。 - 您可以使用命令行补全 ie
touch poems/so <TAB> poems/somefile
。 - 您无法创建
poems
工作目录(即cd
进入其中)。
写位= 如果设置,您可以修改此列表,即您可以在其上{添加、重命名、删除}名称。但!实际上,只有当执行位也被设置时,您才可以执行此操作。
执行位= 将此目录设为您的工作目录,即cd
进入其中。如果您想要执行以下操作,则需要此权限:
- 访问(读、写、执行)其中的项目。
- 修改列表本身,即添加、重命名、删除列表上的名称(当然必须在目录上设置写入位)。
有趣的案例1:如果您对目录具有写入+执行权限,则即使您没有这些项目的写入权限,您也可以{删除,重命名}其中的项目。 (使用粘性位来防止这种情况)
有趣的案例2:如果您对目录具有执行(但不写)权限,并且对其中的文件具有写权限,则无法删除该文件(因为这涉及将其从列表中删除)。但是,您可以删除其内容,例如,如果它是文本文件,您可以使用 vi 打开它并删除所有内容。该文件仍然存在,但它是空的。
概括:
读位= 您可以阅读名单上的名字。
写位= 如果执行位也被设置,您可以在列表中{添加、重命名、删除}名称。
执行位= 您可以将此目录设为您的工作目录。
PS:Kusalananda 提到的文章值得一读。
答案3
我准备了这张表,其中列出了所有可能的权限及其实际效果。
目录 权限 |
八进制 | del 重命名 创建 文件 |
目录列表 | 读取 文件 内容 |
写入 文件 内容 |
光盘目录 | cd 子目录 |
子目录 列表 |
访问 子目录 文件 |
---|---|---|---|---|---|---|---|---|---|
--- | 0 | ||||||||
-W- | 2 | ||||||||
R-- | 4 | 仅文件 名 (*) |
|||||||
RW- | 6 | 仅文件 名 (*) |
|||||||
- X | 1 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ||
-WX | 3 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |
接收 | 5 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |
RWX | 7 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
(*)仅文件名:无法访问尺寸或日期等其他属性。例如,您可以使用 Tab 键来自动完成,但不能使用 ls 命令。
一些想法:
- 和X 未设置,R和W大多没用。
- X独自的禁用读写给您一种错误的安全感,因为您可以盲目地读写文件内容并访问子目录。您应该确保该目录的每个直接子目录都具有显式权限。
- 您很少会使用以下值之外的其他值:
- 0: 无法访问。
- 1:允许穿越的最小访问权限。
- 5:允许读/写,但不改变目录树本身的结构。
- 7:完全访问。
答案4
从罗伯特·洛夫的书《LINUX系统编程》第1章许可-