首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在chroot监狱中运行命令,不以root身份运行,也不以sudo身份运行?

如何在chroot监狱中运行命令,不以root身份运行,也不以sudo身份运行?
EN

Stack Overflow用户
提问于 2010-09-18 00:06:36
回答 5查看 46.4K关注 0票数 22

我正在设置一个最小的chroot,希望避免其中包含sudo或su,但仍然以非root用户身份运行我的进程。这是一个小技巧,因为运行chroot需要root用户。我可以写一个程序来做这件事,看起来像这样:

代码语言:javascript
复制
uid = LookupUser(args[username])  // no /etc/passwd in jail
chroot(args[newroot])
cd("/")
setuids(uid)
execve(args[exe:])

这是我最好的选择,还是有一个标准的工具可以帮我做到这一点?

我推出了我自己的here

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-07-19 20:43:24

如果从根目录调用chrootchroot选项--userspec=USER:GROUP将在非根UID/GID下运行该命令。

顺便说一下,根据git存储库git://git.sv.gnu.org/coreutils,'--userspec‘选项是在coreutils-7.5中首次引入的。

票数 25
EN

Stack Overflow用户

发布于 2010-09-18 04:25:30

结合使用fakechrootfakeroot,您就可以做到这一点。它们会让所有正在运行的程序看起来就像是以root身份在chroot中运行一样,但实际上它们是以您的身份运行的。

另请参见fakechroot's man page

票数 19
EN

Stack Overflow用户

发布于 2011-07-20 22:40:18

您可以利用linux功能使您的二进制程序能够在没有root用户的情况下调用chroot()。例如,您可以对chroot二进制文件执行此操作。作为非root用户,通常你会得到这样的结果:

代码语言:javascript
复制
$ chroot /tmp/
chroot: cannot change root directory to /tmp/: Operation not permitted

但是在运行setcap命令之后:

代码语言:javascript
复制
sudo setcap cap_sys_chroot+ep /usr/sbin/chroot 

它将允许您执行chroot调用。

我不建议您对系统的chroot执行此操作,而是对您自己的程序执行此操作并调用chroot。这样,您就可以更好地控制正在发生的事情,甚至可以在调用之后删除cap_sys_chroot权限,这样在程序中连续调用chroot就会失败。

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

https://stackoverflow.com/questions/3737008

复制
相关文章

相似问题

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