Linux 权限简介
介绍
根据定义,Linux 是一个多用户操作系统,它基于 文件所有权 和权限 的 Unix 概念,以在文件系统级别提供安全性。要可靠地管理云服务器,您必须充分了解所有权和权限的工作原理。处理文件所有权和权限有许多复杂的问题,但本教程将提供一个很好的介绍。
本教程将介绍如何查看和理解 Linux 所有权和权限。如果您正在寻找有关如何修改权限的教程,您可以阅读 Linux Permissions Basics 和 How to Use Umask on a VPS。
先决条件
确保您了解本系列前面教程中涵盖的概念:
- Linux 终端简介
- 基本的 Linux 导航和文件管理
要学习本教程,您需要访问云服务器。您可以按照本指南创建 DigitalOcean Droplet。
关于用户
如介绍中所述,Linux 是一个多用户系统。在所有权和权限之前,您应该了解 Linux 用户 和 组 的基础知识,因为它们是所有权和权限适用的实体。让我们从用户是什么开始。
在 Linux 中,有两种类型的用户:系统用户 和普通用户。传统上,系统用户用于在系统上运行非交互或后台进程,而普通用户用于交互登录和运行进程。当您第一次初始化并登录到 Linux 系统时,您可能会注意到它开始时已经创建了许多系统用户来运行操作系统所依赖的服务。这个是正常的。
您可以通过查看 /etc/passwd
文件的内容来查看系统上的所有用户。此文件中的每一行都包含有关单个用户的信息,以其用户名(第一个 :
之前的名称)开头。您可以使用 cat
打印 passwd
文件的内容:
- cat /etc/passwd
Output…
sshd:x:109:65534::/run/sshd:/usr/sbin/nologin
landscape:x:110:115::/var/lib/landscape:/usr/sbin/nologin
pollinate:x:111:1::/var/cache/pollinate:/bin/false
systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin
lxd:x:998:100::/var/snap/lxd/common/lxd:/bin/false
vault:x:997:997::/home/vault:/bin/bash
stunnel4:x:112:119::/var/run/stunnel4:/usr/sbin/nologin
sammy:x:1001:1002::/home/sammy:/bin/sh
超级用户
除了这两种用户类型之外,还有超级用户 或root 用户,它们能够覆盖任何文件所有权和权限限制。实际上,这意味着超级用户有权访问其自己服务器上的任何内容。此用户用于进行系统范围的更改。
也可以将其他用户帐户配置为具有“超级用户权限”的能力。这通常被称为拥有 sudo
,因为有权暂时获得超级用户权限的用户通过前面的操作来实现使用 sudo
的管理员级命令。事实上,创建一个具有 sudo
系统管理任务权限的普通用户被认为是最佳实践。这样,您可以更保守使用 root 用户帐户。
关于群组
组是零个或多个用户的集合。用户属于默认组,也可以是服务器上任何其他组的成员。
您可以通过查看 /etc/group
文件来查看系统上的所有组及其成员,就像查看用户的 /etc/passwd
一样。本文不涉及组管理。
现在您知道什么是用户和组,让我们来谈谈文件所有权和权限!
查看所有权和权限
在 Linux 中,每个文件都属于一个用户和一个组,并且有自己的访问权限。让我们看看如何查看文件的所有权和权限。
查看文件权限的最常见方法是使用带有长列表选项 -l
的 ls
,例如ls -l 我的文件
。如果要查看当前目录中所有文件的权限,请运行不带 myfile
参数的命令,如下所示:
- ls -l
注意:如果您在一个空的主目录中,并且您还没有创建任何要查看的文件,您可以通过运行以下命令列出 /etc
目录的内容来继续:ls -l /etc
以下是 ls -l
输出的示例屏幕截图,其中包含每列输出的标签:

每个文件都列出了它的模式(包含权限)、所有者、组和名称。为了帮助解释所有这些字母和连字符的含义,让我们将模式列分解为其组件。
理解模式
为了帮助解释所有分组和字母的含义,这里是上面示例中第一个文件的模式元数据的细分:

文件类型
在 Linux 中,有两种类型的文件:普通 和特殊。文件类型由文件模式的第一个字符表示——在本指南中,这将被称为“文件类型字段”。
普通文件可以通过其文件类型字段中的连字符 (-
) 来标识。普通文件可以包含数据或任何其他内容。它们被称为普通文件或常规文件,以区别于特殊文件。
特殊文件可以在其文件类型字段中由非连字符(例如字母)标识,并且由操作系统以不同于普通文件的方式处理。文件类型字段中出现的字符表示特定文件的特殊文件类型。例如,目录是最常见的一种特殊文件,它由出现在其文件类型字段中的 d
字符标识(如上图所示)。还有其他几种特殊文件。
权限类
从图中可以看出,mode 列表示文件类型,后跟三个三元组或权限类:用户(所有者)、组和其他。类的顺序在所有 Linux 系统中都是一致的。
三个权限类的工作方式如下:
- 用户:文件的所有者属于此类。
- Group:文件组的成员属于此类。组权限是一种将给定文件的权限分配给多个用户的有用方法。
- 其他:不属于此文件的用户 或组 类的任何用户都属于此类。
读取符号权限
接下来要注意的是那三组字符。它们以符号形式表示每个类对给定文件的权限。
在每个三元组中,读、写和执行权限以下列方式表示:
- Read:由第一个位置的
r
表示 - 写:在第二个位置用
w
表示 - 执行:由第三个位置的
x
指示。在某些特殊情况下,这里可能会有不同的字符
这些字符之一的连字符 (-
) 表示相应的权限不适用于相应的类。例如,如果文件的组(第二个)三元组是 r--
,则该文件对于与该文件关联的组是“只读的”。
了解读、写、执行
现在您知道了如何读取文件的权限,您应该知道每个权限实际上允许用户做什么。本教程将单独介绍每个权限,但请记住,它们通常相互组合使用,以允许对文件和目录进行有用的访问。
以下是三种权限类型授予用户的访问权限的细分:
读
对于普通文件,读取权限允许用户查看文件的内容。
对于目录,读取权限允许用户查看目录中文件的名称。
写
对于普通文件,写权限允许用户修改和删除文件。
对于目录,写权限允许用户删除目录、修改目录内容(创建、删除和重命名目录中的文件)以及修改用户具有写权限的文件的内容。
执行
对于普通文件,执行权限允许用户执行(运行)文件——用户还必须具有读取权限。必须为可执行程序和 shell 脚本设置执行权限,用户才能运行它们。
对于目录,执行权限允许用户访问或遍历(即 cd
)和访问有关目录中文件的元数据(ls -l中列出的信息)代码>)。
模式(和权限)示例
现在知道如何读取文件的模式,并了解每个权限的含义,您将看到一些常见模式的示例,并附有简要说明,以将概念整合在一起。
-rw--------
:只能由其所有者访问的文件-rwxr-xr-x
:系统上每个用户都可执行的文件。一个“世界可执行”文件-rw-rw-rw-
:系统上的每个用户都可以修改的文件。一个“世界可写”的文件drwxr-xr-x
:系统上的每个用户都可以读取和访问的目录drwxrwx---
:可由其所有者和组修改的目录(包括其内容)drwxr-x---
:所属组可访问的目录
与其他两类相比,文件的所有者通常享有最多的权限。通常,您会看到 group 和 other 类仅具有所有者权限的子集(等效或更少)。这是有道理的,因为文件应该只供出于特定原因需要它们的用户访问。
另一件需要注意的事情是,尽管有许多权限组合是可能的,但在大多数情况下只有某些组合是有意义的。例如,写入 或执行 访问几乎总是伴随着读取 访问,因为它很难修改,也无法执行,您可以'读。
结论
您现在应该对所有权和权限在 Linux 中的工作方式有了很好的理解。要了解如何使用 chown
、chgrp
和 chmod
修改这些权限,请参阅 Linux 权限基础知识和如何在 VPS 上使用 Umask。
如果您想了解有关 Linux 基础知识的更多信息,请阅读本系列的下一篇教程 Linux I/O 重定向简介。