执行与读取位。 Linux 中的目录权限如何工作?

执行与读取位。 Linux 中的目录权限如何工作?

在我的 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章许可-

在此输入图像描述

相关内容