Linux 用户组与文件权限

LinuxLinuxBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

Linux 是一个多用户操作系统。这意味着多个用户可以同时使用同一台 Linux 计算机,每个用户都有自己的私有空间和文件,同时也可以共享一些系统资源。本实验将向你介绍 Linux 中用户管理和文件权限的基础知识,这些概念对于系统管理和安全性至关重要。

查看当前用户信息

在 Linux 中,每个用户都有一个唯一的用户名。让我们从识别当前登录的用户开始。

打开终端并输入以下命令:

whoami

whoami 命令是一个简单的工具,用于显示当前用户的用户名。

你应该会看到类似以下的输出:

labex:project/ $ whoami
labex

这表明你当前以用户 "labex" 的身份登录。

创建新用户

现在,让我们创建一个新用户。在 Linux 中,创建新用户需要管理员权限。我们将使用 sudo 命令来获取这些权限。

sudo 是 "Superuser Do" 的缩写。它允许普通用户以超级用户(或 root 用户)的身份执行命令。

在创建新用户之前,让我们先讨论一下主组(primary group)的概念。在 Linux 中,每个用户都属于一个主组,并且可以属于多个辅助组(secondary groups)。主组通常用作用户创建文件的组所有者。

当你使用 adduser 创建新用户时,它会自动为该用户创建一个与用户名相同的主组。这被称为用户私有组(User Private Group, UPG)方案。

输入以下命令以创建一个名为 "jack" 的新用户:

sudo adduser jack

此命令将执行以下操作:

  1. 创建一个名为 "jack" 的新用户
  2. 创建一个名为 "jack" 的新组(主组)
  3. 将用户 "jack" 添加到 "jack" 组作为其主组
  4. /home/jack 下为 jack 创建一个主目录

系统会提示你为 jack 设置密码并提供一些附加信息。你可以设置一个简单的密码(例如 "password"),然后按 Enter 键以使用其他信息的默认值。

创建用户后,让我们确认是否为 jack 创建了主目录,并检查 jack 的主组:

ls /home
id jack

id 命令将显示 jack 的用户 ID(UID)、主组 ID(GID)以及任何辅助组。

探索用户组

在 Linux 中,用户组是一种用于组织多个用户以进行权限管理的方式。每个用户都有一个主组,并且可以属于多个辅助组。让我们探索当前用户所属的组:

id labex

你应该会看到类似以下的输出:

uid=5000(labex) gid=5000(labex) groups=5000(labex),27(sudo),121(ssl-cert),5002(public)

这表明:

  • 用户 labex 的用户 ID(UID)为 5000
  • labex 的主组名为 labex,组 ID(GID)为 5000
  • labex 属于多个辅助组,包括 sudossl-certpublic

现在,让我们查看系统中的所有组:

cat /etc/group | sort

cat 命令用于显示文件内容,/etc/group 是存储组信息的位置,而 | sort 则按字母顺序对输出进行排序。

要仅查看与 labex 相关的组,请使用:

cat /etc/group | grep -E "labex"

grep 是一个强大的搜索工具。此命令在组文件中搜索包含 "labex" 的行。

创建新组并将用户添加到组中

让我们创建一个名为 "developers" 的新组,并将新用户 "jack" 添加到该组中:

首先,创建新组:

sudo groupadd developers

现在,将 jack 添加到 developers 组:

sudo usermod -aG developers jack

usermod 命令用于修改用户账户。-aG 选项将用户添加到一个辅助组中。

要验证 jack 现在是否是 developers 组的成员,请使用:

groups jack

你应该会看到 "developers" 列在 jack 的组列表中。

将用户添加到 sudo 组

现在我们已经创建了用户 jack,让我们通过将他添加到 sudo 组来赋予他 sudo 权限。但首先,让我们了解为什么这很重要:

将用户添加到 sudo 组允许他们以超级用户或 root 权限执行命令。这有以下几个好处:

  1. 安全性:它允许用户在不以 root 用户身份登录的情况下执行管理任务,这通常被认为是一种安全风险。
  2. 可追溯性:当用户使用 sudo 时,他们的操作会被记录,从而提供管理操作的审计跟踪。
  3. 便利性:它消除了为偶尔的管理任务切换到 root 用户账户的需要。
  4. 细粒度控制:sudo 配置可以自定义,以允许特定用户仅以提升的权限运行某些命令。

要将 jack 添加到 sudo 组,请使用以下命令:

sudo usermod -aG sudo jack

此命令使用 usermod 来修改用户账户。-aG 选项表示“追加到组”,因此它将 jack 添加到 sudo 组,而不会将他从其他组中移除。

将 jack 添加到 sudo 组后,你可以通过以下命令验证他的组成员身份:

sudo groups jack

你应该会看到 sudo 列在 jack 的组列表中。

通过将 jack 添加到 sudo 组,我们赋予了他执行系统管理任务的能力。然而,重要的是要记住,能力越大,责任越大。拥有 sudo 权限的用户应该是可信的,并且了解其操作的潜在影响,因为他们可能会影响整个系统。

理解与操作文件权限和所有权

在 Linux 中,文件权限和所有权对系统安全至关重要。让我们探索这些概念并学习如何操作它们。

  1. 首先,让我们检查 /home 目录中的当前权限:
ls -l /home

你将看到类似以下的输出:

total 8
drwxr-xr-x 2 jack  jack  4096 Jul 30 10:00 jack
drwxr-xr-x 5 labex labex 4096 Jul 30 09:55 labex

让我们分解一下这些信息的含义:

  • 第一个字符表示文件类型(d 表示目录,- 表示普通文件)
  • 接下来的 9 个字符表示所有者、组和其他用户的权限(按此顺序)
  • r 表示读取权限,w 表示写入权限,x 表示执行权限
  • 这些字符后面的用户名是文件所有者,接着是组所有者
  1. 现在,让我们创建一个新文件并更改其所有权:
touch /home/labex/testfile
ls -l /home/labex/testfile
sudo chown jack:jack /home/labex/testfile
ls -l /home/labex/testfile

touch 命令用于创建一个空文件。最初,文件将由 labex 拥有。然后我们使用 chown 将所有权更改为 jack(用户和组)。

为什么要更改所有权?在 Linux 中,文件所有者对其文件拥有特殊权限。通过更改所有权,我们赋予 jack 对该文件的完全控制权。

  1. 最后,让我们修改文件的权限:
sudo chmod 750 /home/labex/testfile
ls -l /home/labex/testfile

chmod 命令用于更改文件的权限。数字 750 是一种简写方式,用于设置权限:

  • 7(所有者):读取(4) + 写入(2) + 执行(1) = 7
  • 5(组):读取(4) + 执行(1) = 5
  • 0(其他用户):无权限

此权限设置意味着:

  • 所有者(jack)可以读取、写入和执行文件
  • jack 组的成员可以读取和执行文件
  • 其他用户对文件没有任何权限

为什么要设置这些权限?这是一种常见的权限设置,允许所有者完全访问,赋予组有限的访问权限,并限制其他用户的访问。这是可用性和安全性之间的平衡。

理解文件权限和所有权在 Linux 中至关重要。它使你能够控制谁可以读取、修改或执行文件,这是系统安全和用户隐私的基础。随着你继续使用 Linux,你会发现自己经常使用这些命令来管理对文件和目录的访问。

总结

恭喜!你已经完成了 Linux 用户组和文件权限实验。你学会了如何:

  1. 查看用户信息
  2. 创建新用户并理解主组
  3. 探索和修改用户组
  4. 创建新组并将用户添加到组中
  5. 授予用户 sudo 权限
  6. 查看并理解文件权限
  7. 更改文件所有权
  8. 修改文件权限

这些技能对于在 Linux 环境中管理用户和保护文件至关重要。随着你继续学习 Linux,你会发现这些概念对于系统管理和安全性是必不可少的。