Linux 权限授予

LinuxLinuxBeginner
立即练习

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

简介

在 Linux 系统中,管理用户权限和访问控制是系统管理和安全的基本方面。sudo 命令是“superuser do”的缩写,它允许授权用户以提升的权限执行命令,通常是超级用户或 root 账户的权限。

本实验将指导你在 Linux 环境中为用户授予和限制权限的过程。你将学习如何将用户添加到 sudo 组,使他们能够执行管理任务,以及如何将他们的权限限制在特定命令上。这些技能对于维护安全的系统至关重要,因为在这些系统中,需要仔细控制对敏感操作的访问。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/UserandGroupManagementGroup(["User and Group Management"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux/BasicFileOperationsGroup -.-> linux/cp("File Copying") linux/BasicFileOperationsGroup -.-> linux/mv("File Moving/Renaming") linux/BasicFileOperationsGroup -.-> linux/rm("File Removing") linux/UserandGroupManagementGroup -.-> linux/useradd("User Adding") linux/UserandGroupManagementGroup -.-> linux/usermod("User Modifying") linux/UserandGroupManagementGroup -.-> linux/sudo("Privilege Granting") linux/UserandGroupManagementGroup -.-> linux/groups("Group Displaying") subgraph Lab Skills linux/cp -.-> lab-271393{{"Linux 权限授予"}} linux/mv -.-> lab-271393{{"Linux 权限授予"}} linux/rm -.-> lab-271393{{"Linux 权限授予"}} linux/useradd -.-> lab-271393{{"Linux 权限授予"}} linux/usermod -.-> lab-271393{{"Linux 权限授予"}} linux/sudo -.-> lab-271393{{"Linux 权限授予"}} linux/groups -.-> lab-271393{{"Linux 权限授予"}} end

理解用户管理和 sudo 基础

在这一步中,你将了解 Linux 中的用户管理以及 sudo 命令的基础知识。你将创建一个新用户,并了解如何授予他们管理权限。

什么是 sudo?

sudo 命令允许授权用户以其他用户(通常是超级用户 (root))的安全权限执行命令。这提供了一种在不登录为 root 用户的情况下执行管理任务的方法,这被认为是一种安全最佳实践。

创建新用户

让我们从创建一个新用户账户开始。打开你的终端并执行以下命令:

sudo adduser trusted_advisor

系统会提示你为新用户输入密码和一些可选信息。在本实验中,你可以设置一个简单的密码,如 password123,并通过按回车键将其他字段留空。

输出应该类似于以下内容:

Adding user `trusted_advisor' ...
Adding new group `trusted_advisor' (1001) ...
Adding new user `trusted_advisor' (1001) with group `trusted_advisor' ...
Creating home directory `/home/trusted_advisor' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for trusted_advisor
Enter the new value, or press ENTER for the default
	Full Name []:
	Room Number []:
	Work Phone []:
	Home Phone []:
	Other []:
Is the information correct? [Y/n] Y

检查用户信息

要验证用户是否已成功创建,你可以查看 /etc/passwd 文件的内容:

grep trusted_advisor /etc/passwd

这应该会显示包含用户信息的一行。

授予 sudo 权限

要授予用户 sudo 权限,你需要将他们添加到 sudo 组。在 Ubuntu 中,sudo 组的成员可以使用 sudo 命令。执行以下命令:

sudo usermod -aG sudo trusted_advisor

此命令将用户 trusted_advisor 添加 (-a) 到 sudo 组 (-G sudo)。该用户现在将能够以管理权限执行命令。

验证 sudo 访问权限

要验证新用户是否具有 sudo 访问权限,你可以切换到该用户账户并尝试列出 /root 目录的内容,该目录通常只有 root 用户可以访问:

su - trusted_advisor

当系统提示时,输入你为该用户设置的密码。然后执行:

sudo ls /root

系统会再次提示你输入密码(首次使用 sudo)。输入密码后,你应该会看到 /root 目录的内容,这确认该用户具有 sudo 权限。

最后,退出 trusted_advisor 用户会话以返回到你原来的用户:

exit

使用 sudoers 文件限制 sudo 访问权限

在这一步中,你将学习如何使用 sudoers 文件将用户的 sudo 权限限制在特定命令上。这实现了最小权限原则,即用户应仅拥有执行其任务所需的最小权限。

理解 sudoers 文件

/etc/sudoers 文件控制哪些用户可以使用 sudo 命令以及他们可以运行哪些命令。绝不能使用常规文本编辑器直接编辑此文件,因为语法错误可能会导致你无法访问系统。相反,始终使用 visudo 命令,该命令会在保存前检查语法错误。

编辑 sudoers 文件

要安全地编辑 sudoers 文件,请使用 visudo 命令:

sudo visudo

这将在默认编辑器(通常是 nano 或 vi)中打开 sudoers 文件。

理解 sudoers 语法

sudoers 文件中 sudo 条目的基本语法如下:

user_or_group    host=(run_as_user:run_as_group)    NOPASSWD: commands

其中:

  • user_or_group:此规则适用的用户或组
  • host:此规则适用的主机名(通常为 ALL)
  • run_as_user:命令将以其身份执行的用户(通常为 ALL,表示 root)
  • run_as_group:命令将以其身份执行的组(可以省略)
  • NOPASSWD:可选标签,允许在不输入密码的情况下运行命令
  • commands:可以使用 sudo 执行的特定命令

添加受限的 sudo 访问权限

滚动到文件末尾并添加以下行,以授予 trusted_advisor 仅运行 cpmv 命令且无需密码的权限:

trusted_advisor ALL=(ALL) NOPASSWD: /bin/cp, /bin/mv

在 nano 中保存文件,按 Ctrl+O,然后按 Enter;要退出,按 Ctrl+X

测试受限的 sudo 访问权限

现在让我们测试受限的 sudo 访问权限是否按预期工作。首先,在当前目录中创建一个测试文件:

echo "This is a test file" > important_file.txt

现在,切换到 trusted_advisor 用户:

su - trusted_advisor

当系统提示时输入密码。

尝试将文件复制到根目录,这应该是允许的:

sudo cp /home/labex/project/important_file.txt /root/

这应该会成功执行,并且不会要求输入密码。

现在,尝试运行不在允许列表中的命令,例如 cat

sudo cat /root/important_file.txt

你应该会收到权限被拒绝的错误,因为 cat 不在允许的命令列表中。

最后,验证文件是否已复制到根目录:

sudo ls /root/

你应该在输出中看到 important_file.txt

退出 trusted_advisor 用户会话:

exit

删除测试文件

为了清理,删除测试文件:

sudo rm important_file.txt

理解 sudo 日志和安全注意事项

在这一步中,你将了解 sudo 日志记录和安全最佳实践。监控 sudo 的使用情况对于安全和审计目的非常重要。

sudo 日志记录

当用户使用 sudo 执行命令时,这些操作会被记录下来。这提供了一个审计跟踪,对于安全监控和故障排除很有用。

在 Ubuntu 上,sudo 日志通常存储在系统的认证日志 /var/log/auth.log 中。让我们查看最近的 sudo 活动:

sudo grep sudo /var/log/auth.log | tail -n 10

此命令显示最后 10 条与 sudo 相关的日志条目。输出应包括时间戳、用户名以及使用 sudo 执行的命令。

sudo 的安全最佳实践

以下是管理 sudo 权限的一些最佳实践:

  1. 最小权限原则:用户应仅拥有执行其任务所需的最小权限。
  2. 使用特定命令:不要授予完全的 sudo 访问权限,而是明确指定用户可以运行哪些命令。
  3. 设置密码要求:对于敏感操作,确保用户在使用 sudo 时必须输入密码。
  4. 定期审计:定期审查 sudo 日志和 sudoers 文件,以确保配置正确。
  5. 移除不必要的访问权限:当用户不再需要提升的权限时,及时将他们从 sudo 组中移除。

移除 sudo 访问权限

如果用户不再需要 sudo 权限,你可以将他们从 sudo 组中移除:

sudo deluser trusted_advisor sudo

验证该用户是否不再属于 sudo 组:

groups trusted_advisor

输出的组列表中应不再包含 "sudo"。

测试撤销的 sudo 访问权限

让我们验证该用户是否不再能使用 sudo 执行命令:

su - trusted_advisor

当系统提示时输入密码。

尝试使用 sudo 运行一个命令:

sudo ls /root

你现在应该会收到权限被拒绝的错误。

退出 trusted_advisor 用户会话:

exit

重新添加 sudo 访问权限

为了本实验的目的,让我们将该用户重新添加到 sudo 组:

sudo usermod -aG sudo trusted_advisor

验证该用户现在是否再次属于 sudo 组:

groups trusted_advisor

输出的组列表中现在应包含 "sudo"。

总结

在本实验中,你学习了重要的 Linux 用户管理和权限控制技术。你通过实践掌握了以下概念和操作:

  1. 创建用户:你学习了如何使用 adduser 命令创建新的用户账户。
  2. 授予 sudo 权限:你了解了如何通过将用户添加到 sudo 组来赋予他们管理权限。
  3. 限制 sudo 访问权限:你通过使用 sudoers 文件将用户的 sudo 访问权限限制在特定命令上,实践了最小权限原则。
  4. sudo 日志记录和监控:你探索了 sudo 活动是如何被记录的,以及出于安全目的监控这些日志的重要性。
  5. 管理 sudo 访问权限:你学习了如何根据需要为用户添加和移除 sudo 权限。

这些技能是 Linux 系统管理和安全的基础。通过正确管理用户权限,你可以维护一个安全的系统,让用户在不损害系统完整性和安全性的前提下访问所需的资源。