Linux/Unix 中的文件权限:如何读取、写入和更改

⚡ 智能摘要

Linux 和 Unix 中的文件权限控制谁可以读取、写入和执行每个文件,通过两层保护多用户系统:所有权(分配用户、组和其他)和读取、写入和执行权限位。

  • 👥 产权: 每个文件和目录都属于一个用户(所有者)、一个组和其他用户(有时称为“世界”)。
  • ???? 权限: 每个所有者类别都有三种权限:读取 (r)、写入 (w) 和执行 (x)。
  • 📃 清单: ls -l 命令显示权限字符串,例如 -rw-rw-r--,分别表示所有者、组和所有人。
  • 🔢 绝对模式: 使用三位八进制数 chmod 一次性设置所有三个类的权限,例如 764。
  • 符号模式: 使用 u、g、o、a 和 +、-、= 来更改一个所有者类,而不会影响其他所有者类。
  • 🧭 所有权命令: chown 命令会同时更改所有者和组,而 chgrp 命令只会更改组。
  • 🤖 人工智能帮助: AI 助手和 GitHub Copilot 可以生成和解释 chmod 和 chown 命令。

Linux 和 Unix 中的文件权限:如何读取、写入和更改

文件权限 Linux Unix 系统会决定谁可以读取、修改或运行每个文件,从而确保共享的多用户系统的安全。本页将详细介绍文件所有权、读取、写入和执行权限,以及更改这些权限的命令。

Linux 是 Unix 的克隆版本,Unix 是一款多用户操作系统,允许多个用户同时访问。Linux 无需任何修改即可在大型机和服务器上运行。但这引发了安全隐患,因为未经授权或恶意的用户可能会损坏、更改或删除关键数据。为了有效保障安全,Linux 将授权分为两个级别:

  • 所有权
  • 允许

文件权限和所有权的概念在Linux系统中至关重要。本文将解释Linux的权限和所有权概念,并对二者进行探讨。我们先从所有权开始。

Linux 文件所有权

Unix/Linux 系统中的每个文件和目录都分配有三种类型的所有者,如下所示。下图展示了所有权如何映射到用户、组和其他实体。

Linux 文件所有权示意图,显示了用户、组和其他权限类别

用户

用户是文件的所有者。默认情况下,创建文件的人成为其所有者。因此,用户有时也称为所有者。

团队

A 用户组 可以包含多个用户。属于同一组的所有用户对该文件拥有相同的 Linux 组权限。假设您有一个项目,其中多人需要访问某个文件。与其手动为每个用户分配权限,不如将所有用户添加到一个组,并将该组的权限分配给该文件,这样只有该组的成员才能读取或修改该文件,其他任何人都无法访问。

其他

任何其他有权访问该文件的用户。此人既不是文件的创建者,也不属于可以拥有该文件的用户组。实际上,这意味着除您之外的所有人。因此,当您为其他人设置权限时,也称为为所有人设置权限。

现在最大的问题来了:Linux 如何区分这三种用户类型,才能防止用户 A 影响包含其他用户 B 重要信息或数据的文件?这就像不希望你的同事修改你的…… Linux电脑 查看您的图片。这就涉及到权限设置,权限决定了用户的行为。

让我们来了解一下Linux的权限系统。

Linux 文件权限

Unix/Linux 系统中的每个文件和目录都为上面讨论的三个所有者定义了以下三种权限。

  • 阅读: 此权限赋予您打开和读取文件的权限。对目录的读取权限使您能够列出其内容。
  • 写: 写入权限赋予您修改文件内容的权限。目录的写入权限赋予您添加、删除和重命名存储在该目录中的文件的权限。假设您拥有某个文件的写入权限,但没有该文件所在目录的写入权限。在这种情况下,您可以修改文件内容,但无法重命名、移动或从目录中删除该文件。
  • 执行: In Windows可执行程序通常带有“.exe”扩展名,您可以轻松运行它。在Unix/Linux系统中,您必须设置执行权限才能运行程序。如果未设置执行权限,您或许仍然可以查看或修改程序代码(前提是已设置读写权限),但无法运行它。

让我们通过示例来了解 Linux 中的文件权限。在终端运行 `ls -l` 命令会得到:

ls -l

下面的屏幕截图显示了长列表中的权限字符串。

终端 ls -l 输出显示文件的权限字符串为 rw-rw-r--

这里,我们突出显示了“-rw-rw-r--”,这段看起来很奇怪的代码告诉我们 Unix 系统授予所有者、用户组和所有人的权限。

这里,第一个“-”表示我们已选择一个文件。下面的图标表示一个普通文件。

小图标表示所列项目为普通文件

否则,如果它是一个目录,则会显示“d”,如下面的列表所示。

终端列表显示一个目录,其权限字符串以字母“d”开头。

人物很容易记住。

  • r = 读取权限
  • w = 写入权限
  • x = 执行权限
  • – = 无权限

我们换个角度来看。代码的第一部分是“rw-”。这表明所有者“Home”可以:

  • 读取文件
  • 写入或编辑文件

由于执行位被设置为“-”,因此所有者无法执行该文件。下图显示执行位已被清除为短横线。

一个小图标,显示执行权限位已清除为短横线。

许多Linux发行版,例如Fedora、CentOS和,都是出于设计考虑而采用的。 Ubuntu 将用户添加到与其同名的组中。例如,用户“tom”将被添加到名为“tom”的组中。

第二部分是“rw-”。它属于用户组“Home”,组成员可以:

  • 读取文件
  • 写入或编辑文件

第三部分面向全球用户,即所有用户。它显示为“r–”。这意味着用户只能:

  • 读取文件

下面的步骤将权限字符串的每个部分映射到所有者、组和世界。

将 rw-rw-r-- 权限字符串分解为所有者、组和世界部分。

在 Linux 系统中使用“chmod”命令更改文件/目录权限

假设你不想让同事看到你的个人照片,这可以通过更改文件权限来实现。

我们可以使用“chmod”命令。 命令,即“更改模式”。使用该命令,我们可以为所有者、组和所有人设置文件或目录的权限(读取、写入、执行)。

语法:

chmod permissions filename

该命令有两种使用方法:

  • 绝对模式
  • 符号模式

Linux 中的绝对(数值)模式

在这种模式下,文件权限不以字符形式表示,而是以三位八进制数表示。下表列出了所有权限类型的数值。

联系电话 权限类型 图形符号
0 没有权限 -
1 演练: -X
2 填写 -W-
3 执行 + 写入 -wx
4 了解 r-
5 读取 + 执行 RX
6 阅读+写作 RW
7 读取 + 写入 + 执行 RWX

让我们看看 chmod 命令的实际应用,如下图终端窗口所示。

终端运行 chmod 764 命令更改文件 sample 的权限

在上面的终端窗口中,我们将文件“sample”的权限更改为“764”。“764”绝对路径的含义如下:

  • 所有者可以读取、写入和执行。
  • 用户组拥有读写权限。
  • 世界只能阅读。

这显示为“-rwxrw-r--”,如下结果所示。

终端列表显示了执行 chmod 764 后带有 -rwxrw-r-- 权限字符串的示例文件。

这就是在 Linux 系统中通过分配绝对数字来更改文件用户权限的方法。

Linux 中的符号模式

绝对模式下,您可以更改所有三个所有者的权限。符号模式下,您可以修改特定所有者的权限。它使用数学符号来修改 Unix 文件权限。

Opera器 描述
+ 为文件或目录添加权限
删除权限
= 设置权限并覆盖之前设置的权限。

各所有者名单如下。

用户 指称
u 用户/所有者
g
o other
a 所有

我们将不再使用像 755 这样的数字权限,而是使用像 rwx 这样的字符。让我们来看下面的例子。

使用符号命令 chmod,通过 u、g、o 和 +、-、= 来更改特定权限。

在 Linux 中更改所有权和组

要更改文件或目录的所有权,可以使用以下命令:

chown user filename

如果要同时更改文件或目录的用户和组,请使用以下命令:

chown user:group filename

让我们看看它是如何运作的,如下所示。

在终端运行 chown 命令来更改文件的所有者和组。

如果您只想更改组所有者,请使用以下命令:

chgrp group_name filename

“chgrp”代表更改组。下面的屏幕截图显示了 chgrp 命令的使用过程。

使用终端运行 chgrp 命令,仅更改文件的组所有者。

Tips:

  • /etc/group 文件包含系统中定义的所有组。
  • 您可以使用“groups”命令查找您所属的所有组,如下所示。

在终端运行 groups 命令,列出用户所属的组。

  • 您可以使用 newgrp 命令以非默认组成员的身份工作,如下所示。

终端运行 newgrp 命令切换到不同的组

  • 同一个文件不能由两个用户组拥有。
  • Linux 系统中没有嵌套组的概念。一个组不能是另一个组的子组。
  • x — 执行目录意味着允许“进入”目录并获得对子目录的访问权限。
  • 您还可以对文件和目录设置其他权限,这将在以后的高级教程中介绍。

常见问题

使用 chmod 命令添加执行权限。符号形式 chmod +x script.sh 授予所有人执行权限,而 chmod u +x script.sh 仅授予所有者执行权限。之后,您就可以在脚本所在目录中直接运行 ./script.sh 了。

umask 设置新创建的文件和目录的默认权限。文件权限从 666 开始,目录权限从 777 开始,umask 值会递减。tracted。常见的 umask 值为 022 时,文件权限为 644,目录权限为 755。运行 umask 查看当前值。

这些是特殊的权限位。setuid 以所有者的权限运行程序,setgid 以组的权限运行程序或使新文件继承目录的组,而 sticky 位只允许文件所有者删除共享目录(例如 /tmp)中的文件。

是的。只有 root 用户或使用 sudo 命令的用户才能使用 chown 命令更改文件所有者。普通所有者可以将文件分配给自己所属的组,但出于安全考虑,将文件重新分配给其他用户需要 root 权限。

该错误表示您没有修改文件的权限。要运行 chmod 命令,您必须是文件的所有者或 root 用户;要运行 chown 命令,通常需要 root 权限。请在命令前加上 sudo,或者切换到文件的所有者,然后重试。

使用递归的 -R 选项。`chmod -R 755 myfolder` 命令会将权限应用到文件夹及其所有文件和子文件夹,而 `chown -R user:group myfolder` 命令则会更改所有权。请谨慎使用 -R 选项,因为它会影响文件夹下的所有项目。

人工智能助手可以将“仅允许我执行此脚本”之类的请求翻译成正确的 chmod 命令,解释 755 等权限模式的含义,并警告 777 等风险设置。机器学习安全工具还会标记权限看起来过于开放的文件。

是的。 GitHub 副驾驶 可以根据您提供的简短注释(描述您想要的权限或所有者)建议 chmod、chown 和 chgrp 命令,并在您键入时自动补全这些命令。 Rev在运行每个建议之前请先查看,因为权限和所有权的更改会影响安全性。

总结一下这篇文章: