成为 setuid root 是什么意思?

信息安全 linux Unix
2021-08-18 22:19:10

我正在阅读 Tanenbaum 的 Modern Operating Systems 3e。他说:“假设[使用恶意代码] 受到攻击的程序在 UNIX 中是 SETUID 根目录(或在 Windows 中具有管理员权限)。[通过缓冲区溢出攻击插入的恶意代码] 现在可以进行几个系统调用来转换攻击者在磁盘上的 shell 文件放入 SETUID 根目录,这样当它被执行时它就拥有超级用户权限。”

成为SETUID root意味着什么?他的意思是该程序具有root权限吗?为什么他说程序setuid root?

这有点像语言问题,但对于只有基本 linux/unix 的安全新手来说,书中的这段话很难理解。他在说什么?

2个回答

SETUID 意味着可执行文件可以在与执行它的用户不同的权限下运行。

某些应用程序是这样设置的,因此用户可以以低权限运行,但他们需要以更高权限运行的特定应用程序可以。

SETUID 0 或 root 意味着当程序运行时,它就像 root 运行它一样 - 这让您面临在高权限级别运行某些东西的所有常见安全风险 - 它可能对您的系统做任何事情- 所以通常数字需要 SETUID 的应用程序应该在 Unix 机器上最小化。大多数 Unix 机器的安全审计包括寻找具有高风险的全球可写的 SETUID 和 SETGID 文件。

类 unix 系统上的用户帐户由 UID(用户 ID)标识。

一个进程可以与多个 UID 相关联。两个主要的是标识谁拥有进程的“真实 UID”和标识进程当前在哪些用户权限下运行的“有效用户 UID”*。

在此上下文中的“setuid”指的是文件权限位(它也是相关系统调用的名称)。当它设置在可执行文件上并执行该文件时,“有效 UID”将更改为文件的所有者。这意味着程序以其所有者的权限而不是运行它的用户的权限运行。

当我们说一个可执行文件“是 setuid root”时,我们的意思是它设置了 setuid 位并且归用户 0(root)所有。所以它将以 0 的有效 UID 运行,并且基本上可以做它想做的任何事情。

“真实的 UID”保持不变,因此程序可以识别运行它的用户,并在需要时切换回该用户。

setuid 程序是/曾经是 unix 系统的重要组成部分,允许将功能公开给用户,其中整个功能被认为对用户来说是安全的,但用于实现这些功能的构建块却不是。

但是它们也有风险,setuid 程序中的一个小错误很容易暴露出超出预期暴露的内容。setuid 程序也禁用了各种与调试相关的功能,以防止它们被用来绕过限制。

最近,Linux 系统已经用一种称为“功能”的新机制取代了“setuid”的某些用途,该机制允许更细粒度地为程序分配特殊权限。

* 也有可能还有其他的,但它们在这里并没有立即相关,请参阅http://man7.org/linux/man-pages/man7/credentials.7.html了解更多详细信息。