我正在设置一个最小的chroot,希望避免其中包含sudo或su,但仍然以非root用户身份运行我的进程。这是一个小技巧,因为运行chroot需要root用户。我可以写一个程序来做这件事,看起来像这样:
uid = LookupUser(args[username]) // no /etc/passwd in jail
chroot(args[newroot])
cd("/")
setuids(uid)
execve(args[exe:])
这是我最好的选择,还是有一个标准的工具可以帮我做到这一点?
我推出了我自己的here
发布于 2011-07-19 20:43:24
如果从根目录调用chroot
,chroot
选项--userspec=USER:GROUP
将在非根UID/GID下运行该命令。
顺便说一下,根据git存储库git://git.sv.gnu.org/coreutils
,'--userspec‘选项是在coreutils-7.5中首次引入的。
发布于 2010-09-18 04:25:30
结合使用fakechroot和fakeroot,您就可以做到这一点。它们会让所有正在运行的程序看起来就像是以root身份在chroot中运行一样,但实际上它们是以您的身份运行的。
发布于 2011-07-20 22:40:18
您可以利用linux功能使您的二进制程序能够在没有root用户的情况下调用chroot()。例如,您可以对chroot
二进制文件执行此操作。作为非root用户,通常你会得到这样的结果:
$ chroot /tmp/
chroot: cannot change root directory to /tmp/: Operation not permitted
但是在运行setcap
命令之后:
sudo setcap cap_sys_chroot+ep /usr/sbin/chroot
它将允许您执行chroot调用。
我不建议您对系统的chroot
执行此操作,而是对您自己的程序执行此操作并调用chroot。这样,您就可以更好地控制正在发生的事情,甚至可以在调用之后删除cap_sys_chroot权限,这样在程序中连续调用chroot就会失败。
https://stackoverflow.com/questions/3737008
复制相似问题