首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何知道用户是root还是fakeroot?

如何知道用户是root还是fakeroot?
EN

Stack Overflow用户
提问于 2013-09-07 16:54:20
回答 2查看 1.4K关注 0票数 3

我想知道用户是否是根用户,而不考虑该用户是否在使用类似fakeroot的工具。

我尝试了函数getuid()geteuid()getlogin(),但是当我启动fakeroot命令时,它们都发送自己的帐户信息,而不是root

对于此代码:

代码语言:javascript
复制
printf("%d %d %s\n", getuid(), geteuid(), getlogin());

我得到的是:

代码语言:javascript
复制
% fakeroot ./busybox rm 
1000 1000 julien

当我想得到这样的东西时:

代码语言:javascript
复制
0 0 root

(登录就足够了)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-07 17:03:54

nneonneo的理由是正确的,但这里有一个解决方案:法克鲁特。它使用ptrace和系统调用拦截,而不是LD_PRELOAD和库调用拦截,这使得它与静态链接兼容,更加健壮,甚至能够处理从libc内部发出的调用(否则将无法连接)。

票数 4
EN

Stack Overflow用户

发布于 2013-09-07 16:59:05

看起来您的二进制文件(busybox)是针对静态libc编译的。fakeroot使用动态库预加载来拦截和替换对各种libc函数的调用,但是只有当二进制文件被动态链接到libc时,这才有效。如果它是静态链接的,则函数调用绑定到二进制文件中的实际调用,因此无法拦截它们。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18675686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档