在阅读了this question的一些非常好的答案之后,我仍然很模糊你为什么要假装你是root而没有获得实际root的任何好处.
到目前为止,我可以收集到的是fakeroot用于为一个文件提供所有权,该文件在解压缩/ tar时需要是root文件.我的问题是,为什么你不能用chown做到这一点?
谷歌小组讨论here指出你需要fakeroot来编译Debian内核(如果你想从非特权用户那里做).我的评论是,你需要成为root才能编译的原因可能是因为没有为其他用户设置读取权限.如果是这样不是fakeroot允许编译的安全违规(这意味着gcc现在可以读取root用户的文件)?
这个答案here描述了实际系统调用是用用户的真实uid / gid进行的,那么fakeroot在哪里帮助呢?
fakeroot如何在Linux上阻止不需要的权限提升?如果fakeroot可以欺骗tar创建一个由root拥有的文件,为什么不用SUID做类似的事情呢?
根据我收集的内容,当您想要更改您构建为root的任何包文件的所有者时,fakeroot非常有用.但是你可以用chown做到这一点,所以我在哪里缺乏对这个组件如何被使用的理解?
解决方法:
So far, what I can gather is that fakeroot is used to give ownership to a file that needs to be root when it is unzip/tar’ed. My question, is why can’t you just do that with chown?
因为你不能用chown做到这一点,至少不能作为非root用户. (如果你是以root身份运行,你不需要fakeroot.)这就是fakeroot的重点:允许以root身份运行的程序作为普通用户运行,同时假装需要root的操作成功.
这通常在构建程序包时使用,因此正在安装的程序包的安装过程可以无错误地进行(即使它运行chown root:root,或者安装-o root等). fakeroot会记住它假装提供文件的虚假所有权,因此查看所有权的后续操作会看到这个而不是真实的;这允许后续的tar运行,例如存储root拥有的文件.
How does fakeroot stop unwanted privilege escalations on Linux? If fakeroot can trick tar into making a file that was owned by root, why not do something similar with SUID?
fakeroot不会欺骗tar做任何事情,它保留了构建想要进行的更改,而不会让这些更改在托管构建的系统上生效.您不需要fakeroot来生成包含root和suid所拥有的文件的tarball;如果你有一个二元evilbinary,运行tar cf evil.tar –mode = 4755 –owner = root –group = root evilbinary,作为普通用户,将创建一个包含evilbinary的tarball,由root拥有,并且suid.但是,除非您以root用户身份执行此操作,否则您将无法提取该tarball并保留这些权限:此处没有权限提升. fakeroot是一种权限降级工具:它允许您以常规用户身份运行构建,同时保留构建在以root身份运行时所具有的效果,允许稍后重放这些效果.将效果应用于“真实”总是需要root权限; fakeroot没有提供任何获取它们的方法.
要更详细地了解fakeroot的使用,请考虑典型的分发构建涉及以下操作(以及许多其他操作):
>安装由root拥有的文件
> ……
>归档那些仍由root拥有的文件,这样当它们被提取时,它们将归root所有
如果你不是root的话,第一部分显然会失败.但是,当在fakeroot下运行时,作为普通用户,该过程变为
>安装由root拥有的文件 – 这会失败,但fakeroot假装它成功,并记住更改的所有权
> ……
>归档那些仍由root拥有的文件 – 当tar(或正在使用的任何归档程序)询问系统文件所有权时,fakeroot会更改答案以匹配之前记录的所有权
因此,您可以在不是root的情况下运行包构建,同时获得与您真正以root身份运行时相同的结果.使用fakeroot更安全:系统仍然无法执行用户无法执行的任何操作,因此恶意安装过程不会损坏您的系统(除了触摸您的文件).
在Debian中,构建工具已得到改进,以便不再需要它,您可以使用build packages without fakeroot
. dpkg直接使用Rules-Requires-Root指令支持(见rootless-builds.txt
).
要了解fakeroot的用途以及以root身份运行的安全性方面,可能有助于考虑打包的目的.从源代码安装软件时,要在系统范围内使用,请按以下步骤操作:
>构建软件(可以在没有特权的情况下完成)
>安装软件(需要以root身份完成,或至少作为允许写入相应系统位置的用户)
当你打包一个软件时,你会推迟第二部分;但要成功完成,您仍需要将软件“安装”到软件包中,而不是“安装”到系统上.因此,当您打包软件时,该过程将变为:
>构建软件(没有特殊权限)
>假装安装软件(再次没有特殊权限)
>将软件安装作为一个包捕获(同上)
>使包装可用(同上)
现在,用户通过安装包来完成该过程,该过程需要以root用户身份完成(或者再次,具有相应权限的用户可以写入相应的位置).这是实现延迟特权进程的地方,也是需要特殊权限的进程的唯一部分.
fakeroot通过允许我们运行软件安装过程并捕获其行为而无需以root身份运行,从而帮助完成上述步骤2和3.