我正在编写一个基于Python的Web服务器,它应该能够执行"插件",以便可以轻松扩展功能.
为此,我考虑了有多个文件夹(每个插件一个)和一些shell/python脚本的方法,这些脚本以可能发生的不同事件的预定义名称命名.
一个示例是具有on_pdf_uploaded.py在将PDF上载到服务器时执行的文件.为此,我将使用Python的子流程工具.
为了方便和安全,这将允许我使用Unix环境变量来提供进一步的信息并设置进程的工作目录(cwd),以便它可以访问正确的文件而无需找到它们的位置.
由于插件代码来自不受信任的来源,我希望尽可能安全.我的想法是在子进程中执行代码,但是将它放入具有不同用户的chroot jail中,这样它就无法访问服务器上的任何其他资源.
不幸的是我找不到任何关于这一点,我不想依赖不受信任的脚本将自己置于监狱.
此外,我也不能将主/调用进程放入chroot jail,因为当服务器回答其他请求时,插件代码可能同时在多个进程中执行.
所以这里有一个问题:如何在chroot jail中执行子进程/脚本,以最小的权限保护服务器的其余部分不被错误的,不可信的代码损坏?
谢谢!
我有多个chroot jails,我希望他们共享一些目录,目前我必须将这些目录复制到我觉得不优雅的jails中.目录是只读的,如'/ usr/bin'.
如果在shell脚本中我写
chroot /home/mayank/chroot/codebase
cd SBC
Run Code Online (Sandbox Code Playgroud)
当我运行这个 shell 脚本时,它确实进入chroot但不执行命令cd SBC,当我退出时chroot它会执行cd SBC。
如何通过 shell 脚本实现某些功能chroot并执行命令chroot?
更新
得到它了!看我的解决方案(第五条评论)
这是我的问题:
我创建了一个名为"jail"的小二进制文件,在/ etc/password中我将它作为测试用户的默认shell.
这是 - 简化 - 源代码:
#define HOME "/home/user"
#define SHELL "/bin/bash"
...
if(chdir(HOME) || chroot(HOME)) return -1;
...
char *shellargv[] = { SHELL, "-login", "-rcfile", "/bin/myscript", 0 };
execvp(SHELL, shellargv);
Run Code Online (Sandbox Code Playgroud)
好吧,无论我怎么努力,似乎当我的测试用户登录时,/ bin/myscript将永远不会被采购.同样,如果我将.bashrc文件放在用户的主目录中,它也会被忽略.
为什么要抨击这些家伙呢?
-
一些精确,但不一定相关,但要澄清评论中提出的一些观点:
是否可以在Linux中启动进程,并限制其对某些文件/目录的访问?例如:
$ start-process --enable-dir=./sandbox --exec="some-script.sh"
Run Code Online (Sandbox Code Playgroud)
some-script.sh将无法做任何事情./sandbox.
一切都在问题中.当我尝试使用带有"."的chroot时.或完整的路径名作为参数,perror告诉我"不允许操作".如果我的问题的答案是肯定的,是否有另一种方法来更改根目录?(没有使用strcmp()/ strncmp()的野蛮方法
谢谢 !
我正试图让chroot在我的mac书上工作.我设置了jail目录以包含/ bin/sh和/ bin/bash的所有要求(递归地称为/ usr/bin/otool)
# ls /var/chroot/*/*
/var/chroot/bin/bash /var/chroot/bin/sh
/var/chroot/usr/lib:
libDiagnosticMessagesClient.dylib libauto.dylib
libc++abi.dylib libobjc.A.dylib
libSystem.B.dylib libc++.1.dylib
libncurses.5.4.dylib system
Run Code Online (Sandbox Code Playgroud)
当我尝试在/ var/chroot上使用chroot时,它一直说它无法找到/ bin/bash
# chroot /var/chroot/
chroot: /bin/sh: No such file or directory
$ sudo chroot /var/chroot/
chroot: /bin/bash: No such file or directory
Run Code Online (Sandbox Code Playgroud)
有什么想法导致chroot无法在我的Mac上工作?
OSX版本10.8.4
编辑:在CentOS上,当我运行ldd/bin/bash时,我得到了所有需要的库.如果我不复制它们,它说/ bin/bash:没有这样的文件或目录.所以我认为这意味着在mac上我缺少libs; 只是不确定哪个.
我正在制作一款游戏,用户可以编写Python程序来控制互相攻击的机器人.每转一圈(在一个转弯的游戏中)他们的脚本将在我的服务器上运行,以确定机器人的下一步行动.如何防止这些用户对我的服务器有意义?
我想过/研究过以下内容:
eval在有限的环境中(即__builtins__禁用)他们的代码chroot/ptrace我有一个Python程序,它运行用户的脚本一千次.如何强制执行一分钟的最长总持续时间,限制其内存资源,阻止它们访问任何文件或网络连接等等?什么是理想的解决方案或解决方案组合?
我有一个商业应用程序,它在chroot环境中提供:启动脚本正在制作chroot,然后启动exe。
该应用程序非常复杂,并且出于支持目的,我不想更改所有环境。
是否可以运行chroot并在docker中启动服务?还是两者不兼容?
在尝试拯救无法启动的 Debian Jessie 系统的过程中,尝试 chroot 时出现以下错误:
chroot: failed to run command ‘/bin/bash’: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我一直在谷歌搜索,据说它与 64 位/32 位冲突有关(从 32 位切入 64 位,反之亦然),但我不知道这如何适用于这里,因为我正在用 64 位实时拯救 64 位系统-hybrid-Debian-USB-stick。
根据 ldd,/bin/bash 位于 chroot 目录中,库依赖项也是如此。
有谁知道导致错误的原因是什么?
以下是我的挂载点和 ls:
# mount |grep mnt
/dev/mapper/centos_vh200-root on /mnt/vh2 type ext4 (rw,relatime,data=ordered)
/dev/sda1 on /mnt/vh2/boot type ext4 (rw,relatime,data=ordered)
none on /mnt/vh2/proc type proc (rw,relatime)
devtmpfs on /mnt/vh2/dev type devtmpfs (rw,nosuid,size=10240k,nr_inodes=414264,mode=755)
sys on /mnt/vh2/sys type sysfs (rw,relatime)
# ls -l /mnt/vh2/bin/bash
-rwxr-xr-x 1 root root 1029624 …Run Code Online (Sandbox Code Playgroud)