优质博文:IT-BLOG-CN
文件权限是 Linux 系统使用的安全模型的核心。它们决定了谁可以访问系统上的文件和目录以及如何访问。本文概述了 Linux 文件权限、它们的工作原理以及如何更改它们。
一、如何查看Linux文件权限?
该ls命令及其-l(用于长列表)选项将向您显示有关 Linux 文件的元数据,包括在文件上设置的权限。
$ ls -l
drwxr-xr-x. 4 root root 68 Jun 13 20:25 tuned
-rw-r--r--. 1 root root 4017 Feb 24 2022 vimrc
在此示例中,您会看到两个不同的列表。输出的第一个字段ls -l是一组元数据,其中包括每个文件的权限。以下是vimrc列表的组成部分:
【1】文件类型:-
【2】权限设置:rw-r–r–
【3】扩展属性:点(.)
【4】用户所有者:root
【5】管理员:root
“文件类型”和“扩展属性”字段超出了本文的讨论范围,但在上面的特色输出中,该vimrc文件是普通文件,即文件类型-(即没有特殊类型)。
列表tuned针对的是d或目录类型的文件。还有其他文件类型,但这两种是最常见的。可用属性取决于文件存储的文件系统格式。对于Red Hat Enterprise Linux 7、8 和 9,默认文件系统格式为 XFS。
二、如何读取文件权限?
本文介绍文件的权限设置。列表中有趣的权限vimrc包括:
rw-r--r–
这个字符串实际上是三组不同权限的表达:
【1】rw-
【2】r–
【3】r-
第一组权限适用于文件的所有者。第二组权限适用于拥有该文件的用户组。第三组权限通常称为“其他”。所有 Linux 文件都属于所有者和组。
当权限和用户用字母表示时,这称为符号模式。对于用户,u代表用户所有者、g组所有者和o其他人。对于权限,r代表读取、w写入和x执行。
当系统查看文件的权限以确定在您与文件交互时向您提供什么信息时,它会进行一系列检查:
【1】它首先检查您是否是拥有该文件的用户。如果是,则授予您用户所有者的权限,并且不会完成进一步的检查。
【2】如果您不是文件所有者,则接下来会验证您的群组成员身份,以查看您是否属于与文件群组所有者匹配的群组。如果是,则您属于群组所有者权限字段,不会进行进一步检查。
【3】当与文件交互的帐户既不是用户所有者,也不属于拥有该文件的组时,将应用“其他”权限。或者,换句话说,这三个字段是互斥的:您不能被覆盖到文件权限设置的多个字段中。
权限不仅仅指可以与文件交互的不同类型的人。每个用户都会获得一个包含三种基本权限类型的表达式。在上面的示例中,文件所有者被赋予了以下权限:
rw-
表达式中的每个字符表示是否授予特定权限。在上面的例子中,已授予文件读取 ( r) 权限和写入 ( ) 权限。但是,未授予执行权限 ( ),这就是表达式中有一个符号的原因。此字段中的权限已禁用。wx-
考虑此示例中的组所有者的权限:
r--
r向组成员授予读取( )权限,但是写入和执行均已被禁用。
三、什么是八进制值?
当 Linux 文件权限用数字表示时,这称为数字模式。在数字模式下,三位数值表示特定文件权限(例如 744)。这些称为八进制值。第一位表示所有者权限,第二位表示组权限,第三位表示其他用户权限。每个权限都分配有一个数值:
【1】r(读):4
【2】w(写入):2
【3】x(执行):1
权限值744中,第一位对应用户,第二位对应组,第三位对应其他,将各个用户分类的值相加,就可以得到文件的权限。
例如,某个文件可能对其所有者具有读取、写入和执行权限,而对所有其他用户则只有读取权限。如下所示:
【1】所有者:rwx = 4+2+1 = 7
【2】组:r-- = 4+0+0 = 4
【3】其他:r-- = 4+0+0 = 4
结果为三位数 744。
四、Linux 文件权限实际上起什么作用?
我已经讨论了如何查看文件权限、权限适用于哪些人以及如何查看哪些权限已启用或已禁用。但这些权限在实践中究竟起什么作用呢?
读(r)
读取权限用于访问文件的内容。您可以使用诸如cat或 之less类的工具来查看文件内容。您也可以使用诸如 Vi 或 之view类的文本编辑器来查看文件内容。复制文件需要读取权限,因为您需要访问文件内容才能复制文件。
写 (w)
写权限允许您修改或更改文件的内容。写权限还允许您使用 shell 中的重定向或附加操作符(>或>>)来更改文件的内容。如果没有写权限,则不允许更改文件的内容。
执行 (x)
执行权限允许您执行文件的内容。通常,可执行文件是命令或编译的二进制应用程序之类的东西。但是,执行权限还允许某人运行 Bash shell 脚本、Python 程序和各种解释语言。
还有其他方法可以在没有执行权限的情况下执行文件内容。例如,您可以使用具有执行权限的解释器来读取文件,并向解释器提供执行指令。一个例子是调用 Bash shell 脚本:
$ bash script.sh
正在运行的可执行文件是bash。该script.sh文件由 Bash 解释器读取,并执行其命令。本文中的内容是通用的,但在 Linux 中,通常还有其他方法来完成任务。
五、目录权限如何工作?
目录文件类型用 表示d。从概念上讲,权限的操作方式相同,但目录对这些操作的解释不同。
读(r)
与常规文件一样,此权限允许您读取目录的内容。但是,这意味着您可以查看目录中存储的内容(或文件)。此权限是命令等操作所必需的ls。
写 (w)
与常规文件一样,这允许某人修改目录的内容。更改目录内容时,您要么向目录添加文件,要么从目录中删除文件。因此,您必须对目录具有写入权限才能从目录中移动 ( mv) 或删除 ( rm) 文件。您还需要写入权限才能创建新文件(使用touch或文件重定向运算符)或将cp文件复制 ( ) 到目录中。
执行 (x)
与文件相比,目录的权限有很大不同。本质上,您可以将其视为提供对目录的访问权限。拥有目录的执行权限不仅允许您查看目录中文件的扩展信息(ls -l例如,使用),还允许您更改工作目录(使用cd)或在访问下级子目录时经过此目录。
缺少目录的执行权限会以有趣的方式限制其他权限。例如,如果您无法访问目录的元数据来存储新文件的信息,您如何将新文件添加到目录中(通过利用写入权限)?您无法做到。正是出于这个原因,目录类型文件通常向一个或多个用户所有者、组所有者或其他人提供执行权限。
六、如何修改Linux文件权限?
chmod您可以使用命令(代表“更改模式”)修改文件和目录权限。要在数字模式下更改文件权限,请chmod在文件名旁边输入所需的八进制值(例如 744)。要在符号模式下更改文件权限,请在文件名旁边输入用户类别和要授予他们的权限。例如:
$ chmod ug+rwx example.txt
$ chmod o+r example2.txt
这将授予用户和组的读取、写入和执行权限,而其他用户只能读取。在符号模式下,chmod u表示用户所有者的权限,chmod g表示文件组中的其他用户,chmod o表示不在文件组中的其他用户。对于所有用户,使用chmod a。
也许您想更改用户所有者本身。您可以使用该chown命令来执行此操作。同样,该chgrp命令可用于更改文件的组所有权。
七、什么是特殊文件权限?
文件和目录具有特殊权限,并在已涵盖的标准权限集上提供额外的特权。
SUID 是用户访问级别的特殊权限,无论谁传递命令,始终以拥有文件的用户身份执行。
SGID 允许以文件的组所有者身份执行文件;目录中创建的文件的组所有权设置为目录所有者。这对于组内不同成员协作使用的目录很有帮助,因为所有成员都可以访问和执行新文件。
“粘滞位”是限制文件删除的目录级特殊权限,这意味着只有文件所有者可以删除目录中的文件。