su 如何检测 fakeroot?

su 如何检测 fakeroot?

如果我运行 su,它会询问目标用户的密码。如果我以 root 身份运行它,它不会要求输入密码。但是如果我在 fakeroot 中运行它,它怎么可能会要求输入密码呢? fakeroot不应该让所有程序都认为你是root吗?对于我自己的程序,执行此操作的唯一方法是尝试运行 su 并查看返回代码。但是 su 是怎么做到的呢?

答案1

su什么也没检测到。

man fakeroot

fakeroot 的工作原理是将文件操作库函数( 等)替换chmod(2)stat(2)模拟真实库函数的效果(如果用户确实是 root)。
这些包装器函数位于共享库 /usr/lib/*/libfake‐root-\*.so或平台上的类似位置。共享对象是通过LD_PRELOAD动态加载器的机制来加载的。 (看ld.so(8)

su,作为 setuid 可执行文件,始终以 root 身份运行 - 但不关心LD_PRELOAD¹。因此,虽然“普通”程序被告知它们以 root 身份运行,并替换了它们所要求的函数,但su从未看到这种修改。所以,su就像平常一样运行。


¹ 这将是一个可怕的安全漏洞;你可以设置LD_PRELOAD包含一个库来执行你想做的任何事情,如果你可以运行它会自动以 root 身份执行任何setuid 可执行文件

答案2

fakeroot(请参阅)的文档man fakeroot似乎为您回答了这个问题:

描述 fakeroot在似乎具有文件操作 root 权限的环境中运行命令。

和,

例子只有用户无论如何都能做到的效果joost才会真实发生

最后,

安全方面 fakeroot是一个常规的、非 setuid 的程序。它不会增强用户的权限,也不会降低系统的安全性。

在第一个块中,注意这个词出现。在示例摘录中,将用户joost视为您。在最后一部分中,有一个明确的声明,它fakeroot不会以任何方式增加权限或降低安全性。具体来说,这意味着它不会改变真实的su工作方式。

相关内容