【发布时间】:2013-09-07 16:54:20
【问题描述】:
我想知道用户是否是 root,而不关心该用户是否使用了类似 fakeroot 的工具。
我尝试了 getuid()、geteuid() 和 getlogin() 函数,但是当我启动 fakeroot 命令时,这些函数中的每一个都会发送我自己的帐户信息,而不是 root。
对于此代码:
printf("%d %d %s\n", getuid(), geteuid(), getlogin());
这是我得到的:
% fakeroot ./busybox rm
1000 1000 julien
当我想得到类似的东西时:
0 0 root
(登录就够了)
【问题讨论】:
-
根据
fakeroot的定义,您不应该以编程方式产生差异;至少如果二进制文件是动态链接的(我猜fakeroot使用LD_PRELOAD技巧)。 -
@BasileStarynkevitch 那么为什么当我输入
fakeroot whoami时会得到root? -
这有点奇怪——
fakeroot应该拦截get*uid调用。busybox是针对静态 libc 编译的吗? -
在我的机器上,
fakeroot id和fakeroot whoami都给出了 root 答案。 -
@nneonneo Ah s***... 是的,这就是为什么,但我必须静态编译它(它用于学校项目),他们给了我这个例子,看看它是否有效。 ..