介绍
Linux 是一种多用户操作系统,它基于 文件所有权 和 权限 的 Unix 概念,以提供文件系统级别的安全性。 如果您计划提高您的 Linux 技能,那么您必须充分了解所有权和权限的工作原理。 处理文件所有权和权限时有许多错综复杂的地方,但我们将尽最大努力将概念提炼成对基本理解它们如何工作所必需的细节。
在本教程中,我们将介绍如何查看和了解 Linux 所有权和权限。 如果您正在寻找有关如何修改权限的教程,请查看本指南:Linux Permissions Basics and How to Use Umask on a VPS
先决条件
确保您了解本系列前面教程中涵盖的概念:
要遵循本教程,访问 Linux 服务器并不是绝对必要的,但是使用一个可以让您获得一些第一手经验。 如果你想设置一个,查看这个链接寻求帮助。
关于用户
正如介绍中提到的,Linux 是一个多用户系统。 在谈论所有权和权限之前,我们必须了解 Linux users 和 groups 的基础知识,因为它们是所有权和权限适用的实体。 让我们开始了解用户是什么的基础知识。
在Linux中,有两种类型的用户:系统用户和普通用户。 传统上,系统用户用于在系统上运行非交互式或后台进程,而普通用户用于交互式登录和运行进程。 当您第一次登录 Linux 系统时,您可能会注意到它一开始有许多系统用户运行操作系统所依赖的服务——这是完全正常的。
查看系统上所有用户的一种简单方法是查看 /etc/passwd
文件的内容。 此文件中的每一行都包含有关单个用户的信息,从其 用户名 (第一个 :
之前的名称)开始。 使用以下命令打印 passwd
文件:
cat /etc/passwd
超级用户
除了这两种用户类型之外,还有 superuser 或 root 用户,它们能够覆盖任何文件所有权和权限限制。 实际上,这意味着超级用户有权访问自己服务器上的任何内容。 此用户用于进行系统范围的更改,并且必须保持安全。
还可以配置具有“超级用户权限”能力的其他用户帐户。 事实上,为系统管理任务创建一个具有 sudo
权限的普通用户被认为是最佳实践。
关于组
组是零个或多个用户的集合。 用户属于默认组,也可以是服务器上任何其他组的成员。
查看所有组及其成员的一种简单方法是查看服务器上的 /etc/group
文件。 我们不会在本文中介绍组管理,但如果您对组感到好奇,可以运行此命令:
cat /etc/group
现在您知道什么是用户和组,让我们来谈谈文件所有权和权限!
查看所有权和权限
在 Linux 中,每个文件都由单个用户和单个组拥有,并且具有自己的访问权限。 下面我们来看看如何查看文件的所有权和权限。
查看文件权限的最常用方法是使用 ls
和长列表选项,例如 ls -l myfile
。 如果要查看当前目录中所有文件的权限,请运行不带参数的命令,如下所示:
ls -l
提示: 如果您在一个空的主目录中,并且您还没有创建任何要查看的文件,您可以通过运行此命令列出 /etc
目录的内容来跟随: ls -l /etc
这是输出可能看起来的示例屏幕截图,其中包含每列输出的标签:
请注意,列出了每个文件的模式(包含权限)、所有者、组和名称。 除了 Mode 列之外,这个列表很容易理解。 为了帮助解释所有这些字母和连字符的含义,让我们将 Mode 列分解为其组成部分。
理解模式
为了帮助解释所有分组和字母的含义,请看一下上面示例中第一个文件的 模式 的特写:
文件类型
在 Linux 中,有两种基本类型的文件:normal 和 special。 文件类型由文件模式的第一个字符表示——在本指南中,我们将其称为文件类型字段。
普通文件可以通过文件类型字段中带有连字符 (-
) 的文件来标识。 普通文件只是可以包含数据的普通文件。 它们被称为普通文件或常规文件,以区别于特殊文件。
特殊文件可以通过在其文件类型字段中具有非连字符字符(例如字母)的文件来识别,并且由操作系统以不同于普通文件的方式处理。 文件类型字段中出现的字符表示特定文件的特殊文件类型。 例如,目录是最常见的特殊文件类型,由出现在其文件类型字段中的 d
字符标识(如上一个屏幕截图所示)。 还有其他几种特殊文件,但它们不是我们在这里学习的必要内容。
权限类
从图中我们知道,Mode 列表示文件类型,后面是权限的三个三元组或类:用户(所有者)、组和其他。 类的顺序在所有 Linux 发行版中都是一致的。
让我们看看哪些用户属于每个权限类:
- User:文件的owner属于这个类
- Group:文件所属组的成员属于这个类
- Other:任何不属于 user 或 group 类的用户都属于这个类。
读取符号权限
接下来要注意的是三个字符或三元组的集合,因为它们以符号形式表示每个类对给定文件具有的权限。
在每个三元组中,读取、写入和执行权限以下列方式表示:
- Read:由第一个位置的
r
指示 - Write:由第二个位置的
w
表示 - Execute:由第三个位置的
x
指示。 在某些特殊情况下,这里可能会有不同的字符
用连字符 (-
) 代替这些字符之一表示相应的权限不适用于相应的类。 例如,如果文件的 group 三元组是 r--
,则该文件对于与该文件关联的组是“只读的”。
理解读、写、执行
既然您知道如何读取文件的哪些权限,您可能想知道每个权限实际上允许用户做什么。 我们将分别解释每个权限,但请记住,它们经常相互结合使用,以允许对文件和目录进行有意义的访问。
以下是三种基本权限类型授予用户的访问权限的快速细分。
读
对于普通文件,读取权限允许用户查看文件的内容。
对于目录,读取权限允许用户查看目录中文件的名称。
写
对于普通文件,写权限允许用户修改和删除文件。
对于目录,写入权限允许用户删除目录、修改其内容(在其中创建、删除和重命名文件),以及修改用户具有写入权限的文件的内容。
执行
对于普通文件,执行权限允许用户执行文件(用户还必须具有读取权限)。 因此,必须先为可执行程序和 shell 脚本设置执行权限,然后用户才能运行它们。
对于目录,执行权限允许用户访问或遍历(即 cd
)并访问有关目录中文件的元数据(在 ls -l
中列出的信息)。
模式(和权限)示例
既然知道了如何读取文件的模式,并且了解了每个权限的含义,我们将提供一些常见模式的示例,并进行简要说明,以将概念结合在一起。
-rw-------
:只有所有者才能访问的文件-rwxr-xr-x
:系统上每个用户都可执行的文件。 一个“世界可执行”文件-rw-rw-rw-
:系统上每个用户都可以修改的文件。 一个“世界可写”的文件drwxr-xr-x
:系统上每个用户都可以读取和访问的目录drwxrwx---
:可由其所有者和组修改(包括其内容)的目录drwxr-x---
:组可访问的目录
您可能已经注意到,与其他两个类相比,文件的所有者通常享有最多的权限。 通常,您会看到 group 和 other 类仅具有所有者权限的子集(等效或更少)。 这是有道理的,因为只有出于特定原因需要访问文件的用户才能访问文件。
另一件需要注意的事情是,尽管可能有许多权限组合,但在大多数情况下,只有某些权限组合才有意义。 例如,write 或 execute 访问几乎总是伴随着 read 访问,因为它很难修改,也无法执行,你无法阅读.
修改所有权和权限
为了使本教程简单,我们不会在此处介绍如何修改文件所有权和权限。 要了解如何使用 chown
、chgrp
和 chmod
来完成这些任务,请参阅本指南:Linux Permissions Basics and How to Use Umask on a VPS 。
结论
您现在应该对所有权和权限在 Linux 中的工作方式有了很好的理解。 如果您想了解有关 Linux 基础的更多信息,强烈建议您阅读本系列的下一个教程: