介绍
Linux 是一个基于 Unix 概念的多用户操作系统,它使用文件所有权和权限来提供文件系统级别的安全性。要可靠地管理云服务器,您必须对所有权和权限的工作原理有相当的了解。处理文件所有权和权限有许多复杂性,但本教程将提供一个良好的介绍。
本教程将介绍如何查看和理解 Linux 的所有权和权限。如果您想要了解如何修改权限的教程,您可以阅读 Linux 权限基础知识和如何在 VPS 上使用 Umask。
先决条件
确保您理解本系列先前教程中涵盖的概念:
要按照此教程进行操作,您需要访问云服务器。您可以按照此指南创建数字海洋(DigitalOcean)Droplet。
关于用户
如介绍中所述,Linux 是一个多用户系统。在理解所有权和权限之前,您应该了解 Linux用户和用户组的基础知识,因为它们是所有权和权限适用的实体。让我们开始学习什么是用户。
在 Linux 中,有两种类型的用户:系统用户和普通用户。传统上,系统用户用于在系统上运行非交互式或后台进程,而普通用户用于登录并交互式地运行进程。当您首次初始化并登录到 Linux 系统时,您可能会注意到它开始时已经创建了许多系统用户,用于运行操作系统依赖的服务。这是正常的。
您可以通过查看/etc/passwd
文件的内容来查看系统上的所有用户。该文件中的每一行都包含有关单个用户的信息,从其用户名(第一个:
之前的名称)开始。您可以使用cat
打印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
超级用户
除了两种用户类型之外,还有超级用户,或根用户,具有覆盖任何文件所有权和权限限制的能力。在实践中,这意味着超级用户有权访问其服务器上的任何内容。这个用户用于进行系统范围的更改。
还可以配置其他用户帐户具有假定“超级用户权限”的能力。这通常被称为具有sudo
,因为具有临时获得超级用户权限的权限的用户会在管理员级别命令之前使用sudo
。事实上,创建一个具有sudo
权限进行系统管理任务的普通用户被认为是最佳实践。这样,您可以更加谨慎地使用根用户帐户。
关于组
组是零个或多个用户的集合。用户属于默认组,并且还可以是服务器上任何其他组的成员。
您可以通过查看/etc/group
文件来查看系统中所有组及其成员,就像您查看用户的/etc/passwd
文件一样。本文不涵盖组管理。
现在你知道用户和用户组是什么了,让我们谈谈文件所有权和权限吧!
查看所有权和权限
在Linux中,每个文件都属于一个单独的用户和一个单独的用户组,并且有自己的访问权限。让我们看看如何查看文件的所有权和权限。
查看文件权限的最常见方法是使用 ls
命令和长格式选项 -l
,例如:ls -l myfile
。如果你想查看当前目录中所有文件的权限,请运行不带 myfile
参数的命令,像这样:
注意:如果你在一个空的家目录中,并且你还没有创建要查看的文件,你可以通过运行以下命令列出 /etc
目录的内容来跟着做:ls -l /etc
以下是 ls -l
输出的示例截图,带有每列输出的标签:
每个文件都列出了其模式(其中包含权限)、所有者、用户组和名称。为了帮助解释所有这些字母和连字符的含义,让我们将模式列分解为其组成部分。
理解模式
为了帮助解释所有分组和字母的含义,这里是上面示例中第一个文件的模式元数据的分解:
文件类型
在Linux中,有两种类型的文件:普通和特殊。文件类型由文件的模式的第一个字符表示——在本指南中,这将被称为“文件类型字段”。
普通文件可以通过它们的文件类型字段中的连字符(-
)来识别。普通文件可以包含数据或其他任何内容。它们被称为普通文件,以区别于特殊文件。
特殊文件可以通过它们的文件类型字段中的非连字符字符(如字母)来识别,并且由操作系统与普通文件不同地处理。出现在文件类型字段中的字符表示特定文件的特殊文件类型。例如,目录,这是最常见的特殊文件类型,通过其文件类型字段中出现的d
字符来识别(就像在前面的截图中)。还有其他几种特殊文件类型。
权限类别
从图表中,您可以看到模式列表示文件类型,后跟三组权限,或称为类别:用户(所有者)、组和其他。所有 Linux 系统中的类别顺序保持一致。
这三个权限类别的工作方式如下:
- 用户:文件的所有者属于此类别。
- 组:文件所属组的成员属于此类别。组权限是将给定文件的权限分配给多个用户的有效方式。
- 其他:对于此文件不属于用户或组类别的任何用户属于此类别。
阅读符号权限
接下来需要注意的是那些三个字符集。它们以符号形式表示每个类别对于给定文件的权限。
在每组三个字符中,读取、写入和执行权限以以下方式表示:
- 读取:由第一个位置的
r
表示 - 写入:由第二个位置的
w
表示 - 执行: 在第三个位置用
x
指示。在一些特殊情况下,这里可能会有不同的字符
A hyphen (-
) in the place of one of these characters indicates that the respective permission is not available for the respective class. For example, if the group (second) triad for a file is r--
, the file is “read-only” to the group that is associated with the file.
理解读、写、执行
现在你知道如何读取文件的权限了,你应该知道每个权限实际上允许用户做什么。本教程将分别介绍每个权限,但请记住,它们经常与彼此结合使用,以便为文件和目录提供有用的访问权限。
以下是三种权限类型授予用户的访问权限的细分:
读取
对于普通文件,读取权限允许用户查看文件的内容。
对于目录,读取权限允许用户查看目录中文件的名称。
写入
对于普通文件,写入权限允许用户修改和删除文件。
对于目录,写权限允许用户删除目录,修改其内容(在其中创建、删除和重命名文件),以及修改用户具有写权限的文件的内容。
执行
对于普通文件,执行权限允许用户执行(运行)文件 — 用户还必须具有读权限。在用户能够运行它们之前,必须为可执行程序和 shell 脚本设置执行权限。
对于目录,执行权限允许用户访问或进入(即cd
)目录,并访问有关目录中文件的元数据(在ls -l
中列出的信息)。
模式(及权限)示例
现在您已经了解如何读取文件的模式,并理解每个权限的含义,接下来将看到一些常见模式的示例,附带简要解释,以将概念串联起来。
-rw-------
:仅由其所有者访问的文件-rwxr-xr-x
:系统上每个用户都可以执行的文件。一个“全局可执行”文件-rw-rw-rw-
:系统上每个用户都可以修改的文件。一个“全局可写”文件drwxr-xr-x
:系统上每个用户都可以读取和访问的目录drwxrwx---
:该目录及其内容可被所有者和组修改drwxr-x---
:该目录可被其组访问
文件的所有者通常享有最多的权限,与其他两类相比。通常情况下,您会发现组和其他类别只有所有者权限的一个子集(相等或更少)。这是有道理的,因为文件应该只能被那些出于特定原因需要它们的用户访问。
另一个需要注意的是,尽管许多权限组合是可能的,但在大多数情况下只有某些组合是有意义的。例如,写入或执行权限几乎总是伴随着读取权限,因为很难修改,也无法执行您无法读取的内容。
结论
您现在应该对Linux中的所有权和权限如何工作有了良好的理解。要了解如何使用chown
、chgrp
和chmod
修改这些权限,请参考Linux权限基础知识以及如何在VPS上使用umask。
如果您想了解更多关于Linux基础知识,请阅读本系列中的下一个教程:Linux I/O重定向简介。
Source:
https://www.digitalocean.com/community/tutorials/an-introduction-to-linux-permissions