引言

Linux 是一个多用户操作系统,它基于文件所有权和权限的 Unix 概念,在文件系统级别提供安全性。 如果您计划提高您的 Linux 技能,那么您必须对所有权和权限的工作方式有一个体面的理解。 在处理文件所有权和权限时,有许多错综复杂的问题,但是我们将尽最大努力提炼概念,直到对其工作原理有基本理解所必需的细节。

在本教程中,我们将介绍如何查看和理解 Linux 的所有权和权限。 如果您正在寻找关于如何修改权限的教程,请查看这个指南: Linux 权限基础知识和如何在 VPS 上使用 Umask

先决条件

确保你理解了本系列之前的教程所涵盖的概念:

  • Linux 终端简介
  • 基本的 Linux 导航和文件管理

严格遵循本教程并不需要访问 Linux 服务器,但是拥有一个可以使用的服务器将让您获得一些第一手经验。 如果你想设置一个,请点击这个链接寻求帮助。

关于用户

正如在介绍中提到的,Linux 是一个多用户系统。 在讨论所有权和权限之前,我们必须了解 Linux 用户和组的基础知识,因为它们是所有权和权限应用的实体。 让我们从用户的基本概念开始。

在 Linux 中,有两种类型的用户: 系统用户和常规用户。 传统上,系统用户用于在系统上运行非交互式或后台进程,而常规用户用于交互式登录和运行进程。 当您第一次登录到 Linux 系统时,您可能会注意到它开始时有许多系统用户运行操作系统所依赖的服务——这是完全正常的。

查看系统上所有用户的一种简单方法是查看 / etc / passwd 文件的内容。 此文件中的每一行都包含有关单个用户的信息,从其用户名(第一行前面的名称:)开始。 使用以下命令打印 passwd 文件:

cat /etc/passwd

超级用户

除了这两种用户类型之外,还有超级用户(即 root 用户)可以覆盖任何文件所有权和权限限制。 实际上,这意味着超级用户有权访问自己服务器上的任何内容。 此用户用于进行系统范围的更改,并且必须保持安全。

它也可以配置其他用户帐户的能力,以承担“超级用户权利”。 实际上,创建一个对系统管理任务具有 sudo 特权的普通用户被认为是最佳实践。

关于团体

组是零个或多个用户的集合。 用户属于默认组,也可以是服务器上任何其他组的成员。

查看所有组及其成员的简单方法是查看服务器上的 / etc / group 文件。 我们不会在本文中讨论组管理,但是如果你对组感到好奇,你可以运行这个命令:

cat /etc/group

现在您已经知道了什么是用户和组,让我们来讨论一下文件所有权和权限!

查看所有权和权限

在 Linux 中,每个文件都由一个用户和一个组拥有,并具有自己的访问权限。 让我们看看如何查看文件的所有权和权限。

查看文件权限的最常见方法是使用 ls 和长列表选项,例如 ls-l myfile。 如果你想查看工作目录文件夹中所有文件的权限,运行命令时不要带参数,像这样:

ls -l

提示: 如果您位于一个空的 home 目录中,并且尚未创建任何要查看的文件,那么可以通过运行以下命令来跟进,即列出 / etc 目录的内容: ls-l / etc

下面是输出结果的屏幕截图示例,每一列的输出都有标签:

请注意,列出了每个文件的模式(包含权限)、所有者、组和名称。 除了 Mode 列之外,这个列表相当容易理解。 为了帮助解释所有这些字母和连字符的含义,让我们将 Mode 列分解为它的组成部分。

理解模式

为了帮助解释所有分组和字母的含义,看看上面例子中第一个文件模式的特写镜头:

文件类型

在 Linux 中,有两种基本类型的文件: 普通文件和特殊文件。 文件类型由文件模式的第一个字符表示——在本指南中,我们将其称为文件类型字段。

普通文件可以由文件类型字段中带连字符(-)的文件标识。 普通文件只是可以包含数据的普通文件。 它们被称为普通文件或常规文件,以区别于特殊文件。

特殊文件可以由文件类型字段中具有非连字符(如字母)的文件标识,并且操作系统处理特殊文件的方式与普通文件不同。 出现在文件类型字段中的字符表示特定文件的特殊文件类型。 例如,目录是最常见的一种特殊文件,它通过出现在其文件类型字段中的 d 字符来标识(如前面的屏幕截图所示)。 还有几种其他类型的特殊文件,但它们不是我们在这里学习的重要内容。

权限类

从关系图中,我们知道 Mode 列表示文件类型,后面跟着三个权限三元组或类: 用户(所有者)、组和其他。 类的顺序在所有的 Linux 发行版中是一致的。

让我们看看属于每个权限类别的用户:

  • 用户: 文件的所有者属于这个类
  • 组: 文件组的成员属于这个类
  • 其他: 不属于用户或组类的任何用户都属于这个类。

读取符号权限

接下来要注意的是三个字符的集合,或者三角形,因为它们以符号形式表示每个类对给定文件的权限。

在每个三元组中,读、写和执行权限以下列方式表示:

  • 阅读: 在第一个位置用 r 表示
  • 写: 在第二个位置用 w 表示
  • 执行: 在第三个位置用 x 表示。 在某些特殊情况下,这里可能有不同的特征

其中一个字符位置的连字符(-)表示相应类不具有相应的权限。 例如,如果某个文件的组 triad 为 r -- ,则该文件对于与该文件关联的组是“只读”的。

理解阅读,写作,执行

现在您知道了如何读取文件的哪些权限,您可能想知道每个权限实际上允许用户做什么。 我们将分别解释每个权限,但请记住,它们经常与其他权限一起使用,以允许对文件和目录进行有意义的访问。

下面是三种基本权限类型向用户授予的访问权限的快速分解。

阅读

对于普通文件,读权限允许用户查看文件的内容。

对于目录,读权限允许用户查看目录中文件的名称。

写作

对于普通文件,写权限允许用户修改和删除文件。

对于目录,写权限允许用户删除目录,修改其内容(创建、删除和重命名目录中的文件) ,并修改用户可以读取的文件的内容。

执行

对于普通文件,执行权限允许用户执行文件(用户还必须具有读权限)。 因此,必须为可执行程序和 shell 脚本设置执行权限,然后用户才能运行它们。

对于目录,执行权限允许用户访问或遍历(即 cd)目录中的文件的元数据(ls-l 中列出的信息)。

模式(和权限)示例

现在我们知道了如何读取文件的模式,并理解了每个权限的含义,接下来我们将展示一些常见模式的示例,并附带简短的解释,以便将这些概念整合在一起。

  • - rw ——-: 只有其所有者才能访问的文件
  • - rwxr-xr-x: 系统上的每个用户都可以执行的文件
  • - rw-rw-rw-: 系统上的每个用户都可以修改的文件
  • Drwxr-xr-x: 系统上的每个用户都可以读取和访问的目录
  • Drwxrwx -- : 可由其所有者和组修改的目录(包括其内容)
  • Drwxr-x -- : 可由其组访问的目录

您可能已经注意到,与其他两个类相比,文件的所有者通常享有最多的权限。 通常,您将看到组和其他类只具有所有者权限的一个子集(等价或更少)。 这是有意义的,因为文件应该只对出于特定原因需要访问它们的用户开放。

另一件要注意的事情是,尽管可能有许多权限组合,但在大多数情况下,只有某些权限组合是有意义的。 例如,写或执行访问几乎总是伴随着读访问,因为它很难修改,也不可能执行,这是您无法读取的。

修改所有权和权限

为了保持本教程的简单性,我们不会在这里介绍如何修改文件所有权和权限。 要学习如何使用 chown、 chgrp 和 chmod 来完成这些任务,请参考这个指南: Linux 权限基础和如何在 VPS 上使用 Umask。

总结

现在,您应该对 Linux 中的所有权和权限是如何工作的有了很好的理解。 如果你想了解更多关于 Linux 的基础知识,强烈建议你阅读本系列的下一个教程:

  • Linux i / o 重定向简介