Linux 用户组与文件权限

LinuxBeginner
立即练习

简介

Linux 是一个多用户操作系统。这意味着多个用户可以同时使用同一台 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」),然后按回车键对其他信息使用默认值。

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

创建用户后,让我们确认是否已为 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 相关的组,请使用:

grep "labex" /etc/group

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

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

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

首先,创建新组:

sudo groupadd developers

现在,将 jack 添加到 developers 组:

sudo usermod -aG developers jack

usermod 命令用于修改用户账户。-aG 选项表示将用户添加到附加组(append to group)。

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

groups jack

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

将用户添加到 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 组后,你可以通过以下命令验证他的组成员身份:

groups jack

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

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

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

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

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

注意:ls -l 中,第二个字符是小写字母 l (ell),而不是数字 1

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

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 学习之旅的深入,你会发现这些概念对于系统管理和安全是必不可少的。