如果我运行 su,它会询问目标用户的密码。如果我以 root 身份运行它,它不会要求输入密码。但是如果我在 fakeroot 中运行它,它怎么可能会要求输入密码呢?fakeroot 不应该让所有程序都认为你是 root 吗?对于我自己的程序,这样做的唯一方法是尝试运行 su,然后查看返回代码。但是 su 是怎么做到的呢?
如果我运行 su,它会询问目标用户的密码。如果我以 root 身份运行它,它不会要求输入密码。但是如果我在 fakeroot 中运行它,它怎么可能会要求输入密码呢?fakeroot 不应该让所有程序都认为你是 root 吗?对于我自己的程序,这样做的唯一方法是尝试运行 su,然后查看返回代码。但是 su 是怎么做到的呢?
fakeroot
(参见)的文档man fakeroot
似乎为您解答了这个问题:和,
最后,
在第一个块中,请注意单词appears。在示例摘录中,将用户视为
joost
您。在最后一节中,有一个明确的声明,fakeroot
不会以任何方式增加特权或降低安全性。具体来说,这意味着它不会改变真实的su
工作方式。su
没有检测到任何东西。来自
man fakeroot
:su
,作为 setuid 可执行文件,始终以 root 身份运行 - 但不关心LD_PRELOAD
¹。因此,虽然“正常”程序被告知它们通过替换他们要求的功能以 root 身份运行,但su
永远不会看到该修改。所以,su
就像往常一样运行。¹ 那将是一个可怕的安全漏洞;你可以只设置
LD_PRELOAD
包含一个库来做你想做的任何事情,如果你可以运行任何setuid 可执行文件,它会自动以 root 身份执行