Linux 用户组与文件权限

LinuxBeginner
立即练习

介绍

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

这是一个引导实验,提供了逐步的指导来帮助你学习和练习。请仔细遵循说明完成每个步骤并获得实践经验。历史数据表明,这是一个初学者级别的实验,完成率为 92%。它获得了学习者 99% 的好评率。

查看当前用户信息

在 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」),然后按回车键使用其他信息的默认值。

注意: 输入密码时,屏幕上不会显示任何字符——出于安全原因,这是正常现象。只需输入密码并按回车即可。

创建用户后,让我们确认是否为 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

你应该能在 jack 的所属组列表中看到「developers」。

将用户添加到 sudo 组

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

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

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

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

sudo usermod -aG sudo jack

此命令使用 usermod 修改用户账户。-aG 选项意为「追加到组」,因此它会将 jack 添加到 sudo 组,而不会将其从其他组中移除。

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

sudo groups jack

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

通过将 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 之旅,你会发现这些概念对于系统管理和安全至关重要。