fakeroot
命令?我们不能简单地使用sudo
或su
命令吗?手册页上说:
fakeroot-在伪造root权限的文件环境中运行命令操作
About.com说:
提供一个伪造的根环境。该软件包旨在启用以下功能:
dpkg-buildpackage -rfakeroot
,即无需成为软件包构建根用户。这是通过将LD_PRELOAD
设置为libfakeroot.so
来完成的,它为getuid
,chown
,chmod
,mknod
,stat
等提供包装器,从而创建了伪根环境。如果您不了解其中的任何一项,就不需要fakeroot
了!我的问题是,它解决了简单的
su
或sudo
不需要什么特殊用途?例如,要在ubuntu中重新打包所有已安装的软件包,请给出以下命令:$ fakeroot -u dpkg-repack `dpkg --get-selections | grep install | cut -f1`
我们可以用sudo或su代替上述的falseroot来执行上述命令:
$ sudo dpkg-repack `dpkg --get-selections | grep install | cut -f1`
编辑:
运行:
$ sudo dpkg-repack `dpkg --get-selections | grep install | cut -f1`
给我这个错误:
控制目录具有错误的权限700(必须为> = 0755和<= 0775)
任何原因?
#1 楼
假设您是在远程服务器上工作的开发人员/程序包维护人员等。您想要更新软件包的内容并重建它,从kernel.org下载并自定义内核并进行构建等。尝试执行这些操作时,您会发现某些步骤要求您具有root
权限( UID
和GID
0)出于不同的原因(安全性,权限被忽略等)。但是,由于您在远程计算机上工作(并且许多其他用户与您有相同的问题),因此无法获得root
权限。这就是fakeroot
的确切作用:它向需要它们的环境假装有效的UID
和GID
。 实际上,您永远不会获得真正的
root
特权(与您提到的su
和sudo
相反)。评论
所以,我不能使用fakeroot来更改系统设置?因为我们将要运行的命令会认为它以root身份运行,并且可以执行我们希望执行的所有操作。不是吗
– rid
17-10-28在7:15
@mrid注意“实际上,您永远不会获得真正的root特权”。所以答案是否定的
–sakisk
17-10-28在16:07
#2 楼
要清楚地知道fakeroot和真实的sudo / su之间的区别,只需执行以下操作:$ fakeroot
# echo "Wow I have root access" > root.tst
# ls -l root.tst
-rw-rw-r-- 1 root root 23 Oct 25 12:13 root.tst
# ls -l /root
ls: cannot open directory /root: Permission denied
# exit
$ ls -l root.tst
-rw-rw-r-- 1 ubuntu ubuntu 23 Oct 25 12:13 root.tst
只要您位于fakeroot shell中,就好像您在root-只要您不尝试执行任何真正需要root特权的操作即可。而这正是包装工具制作在任何机器上都有意义的包装所需要的。
实际上,当您使用fakeroot进行打包时,要实现的目标是使在fakeroot下运行的工具将文件视为由root拥有。仅此而已。因此,实际上,su或sudo无法获得正确的文件所有权。
评论
造假者不危险吗?如果我使用suid位和rx perm创建文件,则该文件将由root拥有,任何人都可以以root身份执行!还是将suid位置设置不起作用?
– Frizlab
2014年10月3日在21:14
不好。我自己尝试过了。 fakeroot的主要原因是将所有权root:root进入构建的软件包,而无需实际成为root。但是,已安装的软件包将具有适当的烫发。
– hanetzer
2014-12-16 14:38
直到我读到@ ntzrmtthihu777的评论,这一切都非常令人困惑!
– Shahbaz
15年1月7日在20:24
抱歉,我不了解说明。为什么不修补工具,以便如果您不是root用户也不会抱怨?一个相关的问题:毕竟,您在fakeroot下创建的文件实际上不是root拥有的。这是否意味着当我安装这样的.deb文件时,我的所有/ usr文件都归谁个叫做fakeroot的用户所有?
– Johannes Schaub-小人
18-10-12在13:32
@ JohannesSchaub-litb,不,这就是重点。这些文件不是由root拥有的,而是在fakeroot shell中,看起来像是。在此shell中创建.deb程序包时,将从文件系统中读取文件所有者(fakeroot拦截并返回root),并将其存储在程序包中。安装软件包时,dpkg然后需要root用户访问权限,因为软件包指示该文件应归root用户所有。
– Shahbaz
19年8月16日在6:12
#3 楼
由于答案(对我自己)很难理解,并且花了一些时间才能理解(此注释使我理解了),因此,我希望给出一个更好的解释。1。 fakeroot中发生的事情
您自己的用户所发生的一切。绝对没有更多。如果您使用
fakeroot
(调用时会给您一个新的外壳,例如sudo
),则假装执行您需要许可的操作,然后退出,绝对不会发生任何事情。如果您考虑一下,这完全是浪费时间。您为什么要做一些实际上不会发生的事情?太疯狂了您可能根本不会做任何事情,也不会有任何区别,因为没有任何痕迹。
请稍等...
2。假根的痕迹
可能还有
fakeroot
的痕迹。让我们看一下MortenSickel的答案中的命令,该命令非常好并且值得赞扬:$ fakeroot
# echo "Wow I have root access" > root.tst
# ls -l root.tst
-rw-rw-r-- 1 root root 23 Oct 25 12:13 root.tst
# ls -l /root
ls: cannot open directory /root: Permission denied
# exit
$ ls -l root.tst
-rw-rw-r-- 1 ubuntu ubuntu 23 Oct 25 12:13 root.tst
乍一看,使用
fakeroot
似乎完全浪费了时间。最后,如果您没有使用fakeroot
,您将得到相同的结果。这里的微妙之处是:
$ cat root.tst
Wow I have root access
这意味着文件的内容仍然记得是根。您可能会说不使用
fakeroot
会产生相同的结果。是的,这个示例太简单了。再举一个示例:
$ fakeroot
# touch x
# touch y
# chown myuser:myuser x
# ls -l > listing
# exit
$ ls -l
total 4
-rw-rw-r-- 1 myuser myuser 152 Jan 7 21:39 listing
-rw-rw-r-- 1 myuser myuser 0 Jan 7 21:39 x
-rw-rw-r-- 1 myuser myuser 0 Jan 7 21:39 y
$ cat listing
total 0
-rw-rw-r-- 1 root root 0 Jan 7 21:39 listing
-rw-rw-r-- 1 myuser myuser 0 Jan 7 21:39 x
-rw-rw-r-- 1 root root 0 Jan 7 21:39 y
让我们看看发生了什么。我假装为
root
,它完全无效,并创建了x
和y
。我假装x
属于myuser
和y
属于root
。它们实际上都属于myuser
(最后我们可以看到),但我只是假装成这样。然后,我创建了一个清单,并将我的想象力保存到文件中。稍后,当我回顾该文件时,可以看到我认为文件应归谁所有。再说一次,它们实际上并不是我想象的人所有,我只是简单地想像而已。
3。所以...您为什么又要这么做?
您可能会说,我真的不需要假冒自己的根来创建该列表。我可以简单地创建清单,然后对其进行编辑以反映我的想象力。是的,您不需要
fakeroot
。实际上,知道fakeroot
实际上并没有做任何事情,就不可能获得以前没有的任何功能。但是,这就是
fakeroot
的全部内容,编辑上市可能是不平凡的。由于可以在您的系统上安装软件包,因此具有tar
ed,gzip
ed,xz
ed,bzip2
ed或任何其他格式,可以将文件保存在一起并记住其权限和所有者。您可以轻松地修改压缩文件并编辑文件所有权吗?我不了解您,但我想不出办法。是否可以构建一个工具,一旦压缩了所有内容,它将修改压缩文件并以编程方式编辑所有权和权限?是的,可以。因此,您可以在压缩之前伪造所有权,或者在压缩之后更改所有权。 Debian人认为前者更容易。
4。为什么不只使用
sudo
?首先,您不需要root特权来构建软件,也不需要root特权来压缩它们。因此,如果您不需要它,则必须真正是Windows用户才能考虑获得该权限。但讽刺的是,您甚至可能没有root密码。此外,假设您确实具有root权限。假设您要假装文件应该仅对根拥有读取权限。因此,您
sudo
,实际上将文件所有者和权限更改为root
,您脱离了root shell并尝试打包所有内容。之所以失败,是因为现在由于您没有root用户访问权限而无法再读取该文件。因此,您必须sudo
并以root用户身份压缩和构建软件包。实际上,您必须以root用户身份执行所有操作。这是BadTM。
作为打包程序,您不需要root权限,也不应该获得它。安装软件包时,您可能需要以root用户身份安装一些文件(
A
),而这正是您需要root权限的地方。 fakeroot
所做的只是使这成为可能。它使打包程序将A
列为归档程序的root用户所有,以便在用户解压缩程序包时,归档程序需要root用户许可并创建A
root用户所有。评论
出色的写作,这很清楚。
–克里斯蒂安·朗(Christian Long)
15年7月24日在14:37
因此,您可以在压缩之前伪造所有权,或者在压缩之后更改所有权。 Debian人认为前者更容易。这对我有所帮助,因为我一直在思考“为什么以后不修改它?”。
–aaaaaa
18 Mar 6 '18 at 19:40
谢谢,这消除了我阅读@Morten的答案后所产生的困惑
– Johannes Schaub-小人
18-10-12在13:38
#4 楼
AFAIK,fakeroot在似乎具有root用户特权可用于文件操作的环境中运行命令。这对于允许用户创建包含根权限/所有权的文件的存档(tar,ar,.deb等)非常有用。如果没有fakeroot,则需要具有root特权,以具有正确的权限和所有权来创建档案的组成文件,然后打包它们,或者必须直接构建档案,而无需使用存档器。fakeroot通过将文件操作库函数(chmod(),stat()等)替换为模拟真实库函数将具有的效果(如果用户确实是root用户)的函数来工作。
简介:
fakeroot [-l|--lib library] [--faked faked-binary] [--] [command]
在此处查看更多:fakeroot
评论
@MaskTheSmokin:因此,fakeroot仅在文件操作操作方面为您提供超级用户权限。
– gkt
2011-2-24在13:11
它并没有真正赋予超级用户权力,它只是伪造了它-运行在其中的程序认为它具有root特权,而实际上仍在使用用户的正常特权。
–PaŭloEbermann
2011-2-26在13:22
认为它具有root特权的程序与具有root特权的程序之间的区别在哪里?如果我可以执行rm -rf /程序,则运行它会认为我具有root特权...
–用户未知
2011-03-20 15:52
@userunknown您也许可以绕过rm检查您是否具有足够的权限,但是内核本身不允许您这样做。取消链接系统调用将失败。不能仅由应用程序来处理权限,或者您可以编写自己的应用程序来检查权限并对其进行任何操作
– Michael Mrozek
2012年10月7日在18:26
一个例子来阐明对fakeroot的需求将是非常棒的。我可以看到fakeroot的用途,但是我看不到为什么人们无法绕开root权限以至于伪造起来比较容易。
– Ehtesh Choudhury
13年4月9日在14:54
#5 楼
我已将其用于打包构建脚本。我不确定运行该脚本的人是否具有root级访问权限,但是该脚本仍需要生成一个tar文件,其中包含属于root的文件。最简单的方法是在fakeroot下运行程序包构建脚本,该脚本欺骗了归档程序,使他们认为文件属于根目录,并将其打包到归档文件中。这样,当将包解压缩到目标计算机(完全在另一台计算机上)后,文件就不属于奇怪的用户或不存在的用户。考虑一下,这是我唯一的位置已经看到这是用于构建某种存档的:嵌入式系统的rootfs,tar.gz存档,rpm软件包,.deb软件包等。
评论
fakeroot是用于错误打包软件的解决方法:没有理由需要root用户来创建此类软件包,但是由于它们不允许您以其他方式指定文件许可权,而无需事先将其直接设置到文件系统中没有选择
– pqnet
2014年8月12日上午10:08
#6 楼
一种常见用法是找出发生故障的二进制文件真正要访问的文件。也就是说,找出并修复或解决由硬编码路径和不正确的异常处理引起的错误。#7 楼
您可以使用fakeroot,而无需实际拥有root特权。如果您有su
和/或sudo
,则可以使用简单的rm -rf /
销毁系统,但最多使用fakeroot可以删除主目录。评论
那并不能解释对fakeroot的需求。您可以自己删除主目录。
– JMCF125
2013年9月16日下午13:34
#8 楼
简单的答案:su和sudo以root身份运行命令。除了部分沙箱安排之外,fakeroot不会这样做。
评论
出于安全原因,最好避免以root用户身份执行可以由普通用户执行的所有操作,即使您可以运行sudo或su,因为它是您的计算机。 fakeroot有两种用法:1)愚弄程序以使您相信您确实是root用户,即使不需要,某些编写不佳的专有软件也可能需要它(通常是Windows开发人员改用Linux); 2)它允许模拟文件模式和所有权更改,否则无法做到,主要是创建具有正确权限和所有权的tar文件,例如在打包软件时很有用。我认为About.com的摘录中的注释可以概括为:如果您不了解其中的任何内容,则不需要fakeroot!如果您无法想到fakeroot有用的情况,那么您实际上就不需要它。但是实际上这样做的人需要它完全理解用例。