掌握Linux权限:深入了解Chmod和Chown

你是否曾经发现自己陷入了复杂的Linux权限世界中?如果你仍然对谁有权读取、写入或执行什么感到困惑,那么你来对地方了。揭秘Linux权限的复杂艺术,特别关注强大的双子星:chmodchown

在这个教程中,你将学会自信地控制对你的文件和目录的访问权限。

现在卷起袖子,像冠军一样征服Linux权限吧!

先决条件

在你深入学习Linux权限之前,请确保你有一台Linux机器来掌握chmodchown命令。本教程使用Ubuntu 22.04 LTS(果冻水母)版本。

掌握chmodchown命令

在Linux权限领域,chmodchown命令拥有重要的力量。理解如何有效地使用这些命令对于任何Linux用户都至关重要,无论是初学者还是经验丰富的管理员。

这两个命令提供了许多控制Linux系统的方法,但以下是每个命令的基本功能:

  • chmod – 这个命令是在Linux中管理文件和目录权限的关键,它允许你指定谁可以读取、写入和执行一个文件。通过使用符号和数字代码的组合,你可以向用户、组和其他人授予或限制访问权限。
  • `chown` – 使用此命令,您可以更改文件和目录的所有权。当您需要转移管理控制权或更改文件与用户/组之间的关联时,此命令非常宝贵。

无论是保护敏感数据还是简化团队访问,这些命令都是您在Linux文件操作世界中的可靠伙伴。

继续阅读,深入了解这些命令的复杂性。

列出文件和查看权限

在使用`chmod`和`chown`命令更改权限和所有权之前,第一步是列出文件并查看其权限。

就像在图书馆中找书一样,在Linux中,您经常需要查看文件列表以及它们的关联权限。这种知识对于有效的文件管理至关重要。

要查看文件或目录的权限:

打开终端并执行以下`ls`命令,以长格式(`-l`)列出当前工作目录中的所有文件和目录

ls -l

长格式提供有关每个文件或目录的详细信息,如下所示。

此信息包括权限、链接数、所有者、组、大小和修改时间。但是您现在的重点是文件权限。

Viewing a list of files and directories

每个文件和目录都受三个关键权限的约束:读(r)、写(w)和执行(x)。每个权限决定用户如何与每个文件和目录的内容交互。

此外,这些权限中的每一个都应用于三个不同的所有权类别:所有者、组和其他人(既不是所有者也不是组成员的用户)。

以下说明了文件权限的每个部分:

  • 第一个字符表示文件()或目录(d)。
  • 第一部分(rw-)- 提供所有者读取和写入权限,但不允许执行。
  • 第二部分(rw-)- 授予组读取和写入权限,但不允许执行。
  • 最后一部分(r–)- 允许其他人读取但不允许写入或执行。
Illustrating file permissions

通过chmod命令修改权限:符号模式

扩展您对文件权限的理解,深入了解修改权限的强大工具。想象一下,可以精确调整谁可以访问、修改或执行文件或目录。chmod命令(更改模式)赋予您控制Linux系统的权力。

当您需要一种灵活且表达力强的方式精确控制对文件和目录的访问权限时,符号模式就会派上用场。

要使用符号模式通过chmod命令修改权限,请按照以下步骤操作:

1. 执行以下who命令,以非特权用户的身份创建一个名为user.txt的新文件(>),其中包含您Linux机器上当前登录用户的列表。

该命令不会在终端上提供输出,但您将在接下来的步骤中验证文件的权限。

who > user.txt

2. 接下来,运行以下命令以查看user.txt文件的权限。

ls -l user.txt

下面,您可以看到文件的默认权限、所有者、创建的日期和月份以及文件名。

请注意当前文件权限,因为稍后您将进行比较。您现在的重点是用户权限(rw-)。

Viewing the file’s default permissions

3. 现在,运行以下命令以删除(-)所有者(u)的写入(w)权限,保留其他类别的所有权限不变。

以下表格详细说明了每个符号的含义:

User Symbol Details Operation Symbol Details Permission Symbol Details
u Owner + Add permissions r Read
g Group Remove permissions w Write
o Others = Set permissions explicitly x Execute

成功执行后,chmod命令不会在终端上提供输出,这适用于本教程的整个过程。

chmod u-w user.txt

4. 更改权限后,运行以下命令以查看user.txt文件的权限。

ls -l user.txt

将您在第二步中记录的文件权限(rw-)与下面的权限进行比较。请注意,所有者(u)现在只有读取权限(r–)。

Viewing modified owner permission

5. 现在,执行以下每个命令以执行以下操作:

  • 为相同的user.txt文件的所有者(u)添加(+),写(w)和执行(x)权限。
  • 查看user.txt文件的信息,以验证已修改的权限。
chmod u+wx user.txt
ls -l user.txt

如下所示,用户现在对user.txt文件具有读取、写入和执行权限(rwx)。

Viewing modified owner permissions

6. 而不是添加,运行以下chmod命令以删除(-)以下内容:

  • 所有者(u)的执行(x)权限。
  • 组(g)的写入(w)权限。
  • 其他(o)的所有权限(rwx)。

此命令允许您使用单个命令同时从不同类别中删除权限。

这次,-v选项告诉chmod显示有关操作所做的更改的消息。

chmod -v u-x,g+w,o-rwx user.txt
Viewing modified permissions for owner, group, and others

7. 接下来,运行以下命令执行以下操作:

  • 为所有类别添加(+)读取权限(r)。
  • 删除(-)所有(a)类别的写入和执行权限(wx)。
chmod a+r,a-wx user.txt

8. 现在,执行以下命令查看user.txt文件的更新权限。

ls -l user.txt
Viewing updated permissions for all categories

? 或者,您可以使用以下命令修改所有三个类别(用户、组和其他)的相同权限:

chmod ugo-r – 移除 (-) 所有三种类别 (ugo) 的读取权限 (r)。

chmod ugo+r – 添加 (+) 所有三种类别 (ugo) 的读取权限 (r)。

9. 最后,运行以下命令执行以下操作:

  • chmod – 为所有者和组设置 (=) 读取和写入 (rw) 权限,并移除其他用户的权限 (o=)。
    = 符号允许您显式设置权限并覆盖任何现有权限。如果在 = 符号后没有指定权限,则该类别的所有权限都会被移除。
  • ls – 查看您对 user.txt 文件权限所做的更改。
chmod ug=rw,o= user.txt
ls -l user.txt
Viewing the modified permissions set

使用 chmod 命令调整访问权限:八进制模式

想象一下,您可以迅速而准确地设置文件权限,而不必使用符号表示法的复杂性。 八进制模式(基数为八的表示法)将成为您管理权限的新方法。

在八进制模式(基数为八的表示法)中,权限使用一个四位或三位数字表示,范围从 0 到 7。 每个数字对应于所有者、组和其他用户的特定权限集,如下所示:

  • 读取(r)= 4
  • 写入(w)= 2
  • 执行(x)= 1
  • 无权限(-)= 0

要了解八进制模式如何管理文件权限,请执行以下步骤:

1. 执行以下chmod命令,将以下权限(664)添加到user.txt文件:

  • 所有者 – 读取(4)+ 写入(2)+ 执行(0)= 6
  • 组 – 读取(4)+ 写入(2)+ 执行(0)= 6
  • 其他人 – 读取(4)+ 写入(0)+ 执行(0)= 4

在Linux中使用chmod命令为文件权限设置四位数字时,前导数字(最左边)表示特殊权限,如setuid、setgid和粘滞位。接下来的三位数字分别表示所有者、组和其他人的标准权限。

但是,在使用三位数字时,第一个数字表示文件所有者(u)的权限,第二个表示文件组(g)的权限,最后一个表示其他人(o)的权限。

在许多情况下,特别是在不涉及特殊权限时,您可能只会看到三位数字表示法。前导零表示八进制表示法,可以隐含并因此被省略。就像下面的示例中,您使用664而不是0664

chmod 664 user.txt

2. 接下来,运行以下命令查看user.txt文件的权限。

ls -l user.txt

在下面的输出中,您可以看到为user.txt文件设置的权限以符号模式显示,这等同于八进制模式的664。

Viewing permissions modified via octal mode

3. 现在运行下面的stat命令,查看关于user.txt文件的一套综合统计信息,包括符号模式和八进制模式的权限。

stat user.txt

在如下所示的Access属性上,您将看到与user.txt文件的文件权限相关的八进制和符号模式。

有了这些信息,您可以增进对使用八进制模式调整权限的理解。

Viewing the octal and symbolic representations of permissions

使用chown命令更改文件所有权

虽然权限规定了对文件或目录可以执行哪些操作,但您可以通过更改所有权来指定谁有权设置或修改这些权限。

chown命令(更改所有者)是管理文件和目录所有权的主要命令。与chmod命令一样,chown命令是一个仅限root用户使用的命令,只有root用户才能更改文件或目录的所有权。

使用chown命令管理所有权,请按照下面的步骤进行:

1. 运行下面的命令创建一个名为bill的用户(useradd),并提供一个强密码。

您需要在本地机器上除了默认用户(即您)之外有多个用户,以查看如何更改所有权的工作方式。

sudo useradd bill
sudo passwd bill
Adding a user and updating user password

2. 接下来,执行下面的每个命令,将当前登录用户的列表(who)以非特权用户的身份写入名为new.txt的文件,并查看(ls)其所有者和权限。

who > new.txt
ls -l  new.txt

下面的输出显示文件所有者是mercy

Viewing the owner of the new.txt file

3. 验证所有者后,运行下面的chown命令将new.txt文件的所有者更改为bill

chmod命令类似,chown命令不提供输出,但您将在以下步骤中验证所有者更改。

sudo chown bill new.txt

4. 现在,运行以下命令查看(lsnew.txt文件的新所有者。

ls -l  new.txt

下面的输出确认您已成功将new.txt文件的所有者更改为bill,现在他对该文件具有控制和权限。

Viewing the new owner of the new.txt file

强制执行chown命令以修改组所有权

在Linux文件系统中,每个文件和目录不仅与个体所有者关联,还与一个组关联。就像一个音调不准的乐器可能破坏整个合奏一样,不正确的所有权可能导致潜在问题。

你应该担心吗?实际上并不需要。组关联允许以层次方式处理文件权限。这种方法使多个用户能够基于组成员身份协作并共享访问权限。

要修改组所有权,请完成以下步骤:

1. 执行以下命令以查看与 new.txt 文件相关联的组。

ls -l  new.txt
Viewing the group associated with the new.txt file

2. 接下来,运行以下命令,它们不会提供输出,但会执行以下操作:

  • 创建一个名为 developers 的组(groupadd)。
  • new.txt 文件的组(chown)所有权更改为 developers
sudo groupadd developers
sudo chown :developers new.txt

? 或者,可以使用以下命令以递归方式更改文件或整个目录的所有者和组所有权。

sudo chown -R john:finance-group user.txt

sudo chown -R john:finance-group ~/Desktop

3. 现在,重新运行以下命令以查看(lsnew.txt 文件的新组所有权。

ls -l  new.txt

下面,输出确认您已成功将 new.txt 文件的组所有权更改为 developers

Viewing the new group ownership of the new.txt file

通过数字 UID 和 GID 更改文件所有权

虽然用户名和组名提供了一种可读性强的方式来识别文件所有者,但每个用户和组也与唯一的数字标识符相关联。

这些唯一的数字标识符是用户 ID(UID)和组 ID(GID)。它们提供了一种明确的方式来在具有重叠或类似用户和组名称的环境中设置文件所有权。

要使用数字 UID 和 GID 更改所有权,请执行以下步骤:

1. 执行以下命令来列出关于 new.txt 文件的信息:

-n 选项告诉 ls 命令显示数字形式的 UID 和 GID,而不是将它们解析为对应的用户和用户组名称。

ls -n new.txt

注意 new.txt 文件关联的 UID 和 GID,因为你将在后续步骤中需要用到它们进行比较。

Viewing the UID and GID associated with the new.txt file

2. 接下来,运行以下 getent 命令来获取你想要设置为文件所有权的用户和用户组的 UID 和 GID。

确保用你想要的用户名和用户组名替换 <username><groupname> 占位符。

getent passwd <username>
getent group <groupname>

注意以下输出中的 UID(即,1002)和 GID(即,1005),因为你将在下一步中需要用它们来改变所有权。

默认情况下,当在 Linux 中创建用户时,会同时创建一个与用户同名的用户组。该组作为用户的主要组,并自动添加到该主要组中。

因此,用户 john 的 GID 与 finance 组的 GID 不同。除非显式将用户添加到该组中,否则它们的对应 GID 保持不同。

Viewing UID and GID for user john and group finance

3. 接下来,运行以下命令来更改 new.txt 文件的所有权和组所有权。确保用步骤二中记录的 UID(1002)和 GID(1005)替换它们。

? 请注意,使用数字 UID 和 GID 可能比用户名和组名不太易读。因此,请确保您正在使用正确的数字,以避免意外更改。

sudo chown 1002:1005 new.txt

4. 最后,重新运行下面的命令以列出有关 new.txt 文件的信息(ls),并验证文件所有权的更改。

ls -n new.txt

将您在第一步中记录的 UID 和 GID 与以下内容进行比较。请注意,新文件的所有权已从 1001:1003 更改为 1002:1005

Verifying the new UID and GID for the new.txt file

结论

您刚刚开始了对 Linux 权限的全面探索,掌握了关键命令如 chmodchown。在本教程中,您已经熟练掌握了使用符号和八进制模式修改权限的技能。

您还学会了通过名称或数字 UID 和 GID 管理文件所有权和组分配的技能。有了对 chmodchown 的新技能,您现在拥有了强大的工具,可以在 Linux 系统中管理访问和所有权。

但是,为什么不进一步增强您的 Linux 熟练度呢?也许可以深入研究高级访问控制方法,包括 访问控制列表(ACLs)?力求对文件和目录权限进行更精确的控制!

Source:
https://adamtheautomator.com/chmod-and-chown/