7. 进程权限

让我们稍微谈谈进程权限。还记得我告诉过你,当你运行启用了 SUID 权限位的 passwd 命令时,你会以 root 身份运行程序吗?这是真的。然而,这是否意味着你暂时是 root,就可以修改其他用户的密码了呢?不,幸运的是不能!

这是因为 Linux 实现了许多 UID。每个进程都关联着三个 UID:

当你启动一个进程时,它会以运行它的用户或组的相同权限运行。这被称为有效用户 ID。这个 UID 用于授予进程访问权限。因此,很自然地,如果 Bob 运行了 touch 命令,该进程将以他的身份运行,他创建的任何文件都将归他所有。

还有另一个 UID,称为真实用户 ID。这是启动进程的用户的 ID。它们用于追踪启动进程的用户是谁。

最后一个 UID 是保存的用户 ID。这允许进程在有效 UID 和真实 UID 之间切换,反之亦然。这很有用,因为我们不希望我们的进程一直以提升的权限运行;在特定时间使用特殊权限是一种良好的实践。

现在让我们再次通过查看 passwd 命令将这些概念整合起来。

运行 passwd 命令时,你的有效 UID 是你的用户 ID;我们暂时假设它是 500。哦,等等,请记住 passwd 命令启用了 SUID 权限。所以当你运行它时,你的有效 UID 现在是 0(0 是 root 的 UID)。现在这个程序可以以 root 身份访问文件了。

假设你尝到了一点权力,你想修改 Sally 的密码。Sally 的 UID 是 600。嗯,你将不会成功。幸运的是,该进程也拥有你的真实 UID,在本例中是 500。它知道你的 UID 是 500,因此你不能修改 UID 为 600 的密码。(当然,如果你是机器上的超级用户,可以控制和更改所有内容,则始终可以绕过此限制)。

由于你运行了 passwd,它将使用你的真实 UID 启动进程,并保存文件所有者(有效 UID)的 UID,这样你就可以在两者之间切换。如果不需要,就没有必要用 root 权限修改所有文件。

大多数情况下,真实 UID 和有效 UID 是相同的,但在像 passwd 命令这样的情况下,它们会改变。

登录以保存您的学习进度

登录

练习

熟能生巧!理解用户 ID 和进程权限对于 Linux 安全和管理至关重要。以下是一些实践性实验,以巩固你对用户和组管理的理解,这构成了 UID 如何运作的基础:

  1. Linux 用户组和文件权限 - 学习基本的 Linux 用户和组管理概念,包括创建和管理用户、探索组成员身份、理解文件权限以及操作文件所有权。本实验提供了在多用户 Linux 环境中进行安全实践的经验。
  2. 添加新用户和组 - 在此挑战中,你将通过创建新用户帐户、设置自定义组和管理组成员身份来模拟向服务器环境添加新团队成员。这将考验你在 Linux 用户和组管理方面的技能,这对于系统管理员和 DevOps 专业人员至关重要。

这些实验将帮助你在实际场景中应用用户和组管理的概念,为理解 UID 如何在 Linux 中控制访问和权限打下坚实的基础。

测验

哪个 UID 决定授予什么访问权限?