简介
根据定义,Linux是一个多用户操作系统,它基于Unix的文件所有权和权限概念,以提供文件系统级别的安全性。要可靠地管理云服务器,您必须对所有权和权限是如何工作的有一个很好的理解。处理文件所有权和权限有许多错综复杂的问题,但本教程将提供一个很好的介绍。
本教程将介绍如何查看和理解Linux所有权和权限。如果您想了解如何修改权限的教程,可以阅读Linux操作系统基础知识和如何在VPS上使用Umask。
前提条件
确保您理解本系列前面教程中介绍的概念:
要学习本教程,您需要访问云服务器。您可以按照本指南创建数字海洋droplet.
用户简介
正如在引言中提到的,Linux是一个多用户系统。在所有权和权限之前,您应该了解LINUX_USERS_AND_GROUPS_的基本原理,因为它们是所有权和权限应用到的实体。让我们开始了解用户是什么。
在Linux中,有两类用户:系统用户_和_普通用户。传统上,系统用户用于在系统上运行非交互或后台进程,而常规用户用于以交互方式登录和运行进程。当您第一次初始化并登录到Linux系统时,您可能会注意到,它开始时有许多已经创建的系统用户,用于运行操作系统所依赖的服务。这是正常的。
您可以通过查看/etc/passwd
文件的内容来查看系统上的所有用户。该文件中的每一行都包含关于单个用户的信息,以ITS_USERNAME_(第一个:
之前的名称)开头。您可以使用cat
打印passwd
文件的内容:
1cat /etc/passwd
1[secondary_label Output]
2…
3sshd:x:109:65534::/run/sshd:/usr/sbin/nologin
4landscape:x:110:115::/var/lib/landscape:/usr/sbin/nologin
5pollinate:x:111:1::/var/cache/pollinate:/bin/false
6systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin
7lxd:x:998:100::/var/snap/lxd/common/lxd:/bin/false
8vault:x:997:997::/home/vault:/bin/bash
9stunnel4:x:112:119::/var/run/stunnel4:/usr/sbin/nologin
10sammy:x:1001:1002::/home/sammy:/bin/sh
超级用户
除了这两种用户类型之外,还有_超级用户_或_根_用户,它能够覆盖任何文件所有权和权限限制。实际上,这意味着超级用户有权访问其自己的服务器上的任何内容。此用户用于在系统范围内进行更改。
还可以将其他用户帐户配置为具有超级用户权限
。这通常被称为拥有sudo
,因为有权临时获得超级用户权限的用户是通过在管理员级别的命令之前使用sudo
来实现这一点的。事实上,创建一个对系统管理任务具有`sudo‘权限的普通用户被认为是最佳实践。这样,您可以在使用根用户帐户时更加保守。
关于群组
组是零个或多个用户的集合。用户属于默认组,也可以是服务器上任何其他组的成员。
您可以通过查看/etc/group
文件来查看系统上的所有组及其成员,就像查看用户的/etc/passwd
一样。本文不涉及组管理。
现在您已经了解了用户和组是什么,让我们来讨论一下文件所有权和权限!
查看所有权和权限
在Linux中,每个文件由单个用户和单个组拥有,并具有自己的访问权限。让我们看看如何查看文件的所有权和权限。
查看文件权限最常见的方式是使用ls
配合长列表选项-l
,例如ls-L myfile
。如果您想查看当前目录下所有文件的权限,请运行不带myfile
参数的命令,如下所示:
1ls -l
<$>[备注]
注意: 如果您在一个空的主目录中,并且还没有创建任何要查看的文件,则可以通过运行以下命令列出/etc
目录的内容:ls-L/etc
<$>
以下是ls-l
输出的示例屏幕截图,输出的每一列都有标签:
每个文件都列出了它的模式(包含权限),列出了所有者、组和名称。为了帮助解释所有这些字母和连字符的含义,让我们将模式列分解为其组成部分。
了解模式
为了帮助解释所有分组和字母的含义,下面是上面示例中第一个文件的模式元数据的细分:
文件类型
在Linux中,有两种类型的文件:Normal_和_Special。文件类型由文件模式的第一个字符指示-在本指南中,这将被称为文件类型字段
。
普通文件可以通过其文件类型字段中的连字符(-
)来标识。普通文件可以包含数据或任何其他内容。它们被称为普通文件或常规文件,以区别于特殊文件。
特殊文件可由其文件类型字段中的非连字符(如字母)标识,并且由操作系统以不同于普通文件的方式进行处理。文件类型字段中显示的字符指示特定文件的特殊文件类型。例如,目录是最常见的特殊文件类型,它由文件类型字段中出现的d
字符标识(如上一个截图所示)。还有几种其他类型的特殊文件。
学习类
从该图中,您可以看到_MODE_COLUMN指示文件类型,后跟三个三元组或权限类别:用户(所有者)、组和其他。类的顺序在所有Linux系统中都是一致的。
这三个权限类的工作方式如下:
- User:文件的_owner_属于这个类。
- Group:文件组的成员属于这个类。组权限是将给定文件的权限分配给多个用户的有用方法。
- Other:不属于此文件的_user_ or group classes的任何用户都属于此类。
读取符号权限
接下来要注意的是那三个字的组合。它们以符号形式表示每个类对给定文件拥有的权限。
在每个空间坐标轴中,读、写和执行权限用以下方式表示:
- Read:在第一个位置用
r
表示 - Write:在第二个位置用w表示
- Execute:在第三个位置用
x
表示。在某些特殊情况下,这里可能会出现不同的字符
其中一个字符的位置用连字符(-
)表示相应的权限对相应的类不可用。例如,如果文件的组(第二个)空间坐标轴是r--
,则该文件对与该文件相关联的组是只读的。
了解读、写、执行
既然您已经了解了如何读取文件的权限,那么您应该知道每个权限实际上允许用户执行哪些操作。本教程将分别介绍每个权限,但请记住,它们经常相互结合使用,以允许对文件和目录进行有用的访问。
以下是这三种权限类型授予用户的访问权限的细目:
阅读
对于普通文件,读权限允许用户查看文件的内容。
对于目录,读权限允许用户查看目录中该文件的名称。
写入
对于普通文件,写权限允许用户修改和删除文件。
对于目录,写权限允许用户删除目录、修改其内容(创建、删除和重命名其中的文件),以及修改用户具有写权限的文件的内容。
执行#
对于普通文件,执行权限允许用户执行(运行)文件-用户还必须具有读取权限。必须先为可执行程序和外壳脚本设置执行权限,然后用户才能运行它们。
对于目录,EXECUTE权限允许用户访问或遍历(即cd
)和访问目录中文件的元数据(ls-l
中列出的信息)。
模式(和权限)示例
既然知道了如何读取文件的模式,并理解了每个权限的含义,您将看到几个常见模式的示例,并提供简短的解释,以将概念结合在一起。
-rw-
:只有其所有者才能访问的文件-rwxr-xr-x
:系统上每个用户都可以执行的文件。一个全球可执行的
文件-rw-
:系统中每个用户都可以修改的文件。一个完全可写
的文件drwxr-xr-x
:系统中每个用户都可以读取和访问的目录drwxrwx-
:所有者和组可修改(包括其内容)的目录drwxr-x-
本组可访问的目录
与其他两个类别相比,文件所有者通常享有最多的权限。通常,您将看到_GROUP_和_OTHER_CLASS只具有所有者权限的一个子集(等同或更少)。这是有意义的,因为文件应该只对出于特定原因需要它们的用户可访问。
另一件要注意的事情是,即使有很多权限组合是可能的,但在大多数情况下只有某些权限组合是有意义的。例如,_WRITE_OR_EXECUTE_ACCESS几乎总是伴随着_READ_ACCESS,因为它很难修改,而且不可能执行,这是您无法读取的内容。
结论
现在,您应该已经很好地理解了所有权和权限在Linux中是如何工作的。要了解如何使用chown
、chgrp
和chmod
修改这些权限,请参阅Linux权限基础知识和如何在VPS.上使用UMASK
如果您想了解更多关于Linux的基础知识,请阅读本系列的下一篇教程LinuxI/O Redirection.简介