我正在像这样运行 Chromium: chromium --no-sandbox
我这样做是因为我在 OpenVZ VM 容器上运行 Debian Squeeze,这是我让它工作的唯一方法。
虽然我一直在读这本书很糟糕。但我想知道究竟是为什么。有人可以向我解释一下吗?
是否有人需要入侵您的计算机才能造成损害?或者漏洞是否来自网络上的文件,如 JavaScript 文件?
如果我将浏览锁定到仅少数“受信任”站点怎么办?(Gmail、stackexchange(当然)和 facebook)
如果我想在 btrfs 中使用哪些命令:
我正在做一个实现分布式模拟的项目:在多个节点上执行任意代码,然后收集和聚合结果。
每个节点都是 Ubuntu Linux 虚拟机的一个实例,并运行一个主进程,负责将要执行的代码转发到多个工作进程(每个内核 1 个)。
这个问题是关于如何确保每个工作人员都在沙盒环境中运行,而不需要为每个工作人员使用虚拟机实例。对工人的确切要求是:
不应强加其他限制:worker 应该能够加载动态库(从只读文件夹)、生成新线程或进程、调用系统函数、ecc ecc 但限制必须由生成/加载的实体继承和应该以总和的方式应用(例如,我们不能让一个工作线程产生两个线程,每个线程使用 800MB,这样的工作线程的内存限制为 1GB)。
不言而喻,工人应该没有办法提高自己的权利。
我花了大量时间审查可用的替代方案(SELinux、AppArmor、cgroups、ulimit、Linux 命名空间、LXC、Docker 等)以获得满足我的要求的最简单的解决方案,但我在该领域的经验有限。
目前的理解:LXC 和 Docker 对我的用例来说有点偏重,并不完全安全1。AppArmor 由于更容易配置而优于 SELinux,将其用于 fs 和 net 限制;cgroups 优于 ulimit(在单个进程上运行),将其用于 mem 和 cpu 限制。
这是实现我的目标的最简单方法吗?我可以只使用 AppArmor 或 cgroups 吗?我的模型中是否存在明显的安全漏洞?指导方针应该是“允许工人自己倒下,但不能做其他事情”。
如果我想在 LVM 中使用哪些命令:
我希望能够将覆盖挂载的上层文件系统的更改合并到下层文件系统。
我对在线(即在安装叠加层时合并)和离线(卸载叠加层然后合并)解决方案都感兴趣。
我找到了几个离线解决方案,我已将其添加为答案。
有谁知道任何在线解决方案?最好有一个“提交”类型的命令,您可以在仍安装覆盖层时运行以合并图层。
在以下问题中提出了类似的问题,但没有答案:
这些帖子中的评论提出了不同的mergefs和bcache,它们都解决了特定的用例,但不是覆盖提供的通用文件系统不可知的用例。
我的目标是拥有一个带有快照的安全文件系统沙箱,可用于任何 Linux 应用程序上的任何(如果可行)底层文件系统,允许您在准备好时回滚更改或手动提交它们。
我怀疑现代主流 Linux 具有所有必要的内置功能,这要归功于过去几年的所有沙箱/虚拟化创新,如果我知道如何使用它们就好了。
我目前正在一个安全的沙箱环境中开始一个评估不受信任的程序(学生作业)的项目。主要思想是围绕 lxc-utils 为 GlassFish 和 Java 包装器创建一个 Web 应用程序来管理 LXC 容器。它将有一个等待程序的队列,一个 Java 包装器将维护固定数量(池)的 LXC 容器,为每个程序分配一个(未使用的)容器。
每个容器都应该使用 SELinux 来保护主机系统。
我的问题是:为沙箱环境创建这样的机制是个好主意,还是有更好的解决方案来解决这个问题?它应该轻巧且安全,以防止学生的创造力。
我已经在 Debian sid 中安装了 SELinux,以便使用将应用程序锁定到受限环境的沙箱,但我无法让它工作。如果我尝试在没有任何选项的许可模式下使用沙箱命令,例如sandbox nano,我会收到以下错误:
/usr/bin/sandbox: [Errno 22] Invalid argument
Run Code Online (Sandbox Code Playgroud)
如果我尝试使用临时 home 和 tmp 目录的选项运行它,无论是否使用 -X 选项,都会弹出另一条错误消息:
Could not set exec context to unconfined_u:unconfined_r:sandbox_x_t:s0:c236,c539.
Failed to remove directory /tmp/.sandbox-root-vfZJIt: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我曾尝试在强制模式下使用沙盒应用程序,但它抱怨缺少类型强制规则。不过我不认为这是问题所在。有谁知道如何解决这一问题?
由于我最近在 Ubuntu 上更新了基于 snap 的 Firefox,因此每当某个应用程序绘制画布时,我都会看到它向日志报告 SECCOMP_RET_TRAP 消息。
由于绘制画布的应用程序通常以每秒 30 帧的速度进行绘制,因此日志中会填充大量无用的垃圾邮件,而且实际上还会消耗大量 CPU 使用率。
我能挖掘到的是,这种行为以前曾被报道过,但双方都试图推卸责任,然后又回到了简单的“不会修复”。(https://bugzilla.mozilla.org/show_bug.cgi?id=1465152,https://bugzilla.redhat.com/show_bug.cgi?id=1507282,https://linux-audit.redhat.narkive.com /BnWpkAXa/limiting-seccomp-audit-events)
那么,如何才能防止日志中充斥着无用的“浏览器中已绘制了画布!哦,快跑寻求帮助”消息呢?是否有一些配置可以过滤特定的 SECCOMP 消息,或者更好:阻止 Firefox 生成这些消息?
(补充:样品线
Sep 13 16:01:48 MYHOST audit[97745]: SECCOMP auid=1000 uid=1000 gid=1000 ses=3 subj=? pid=97745 comm="CanvasRenderer" exe="/snap/firefox/1775/usr/lib/firefox/firefox" sig=0 arch=c000003e syscall=312 compat=0 ip=0x7f48ae38573d code=0x50000)
编辑:我不想
我想通过配置以可重现的方式降低/关闭垃圾邮件,因此遇到相同问题的每个人都可以应用该解决方案。例如,删除与特定“comm”字段值匹配的消息。
在我拥有的一个小脚本中,我正在启动一个 shell,然后使用prlimit 将它的 RLIMIT_NPROC 设置为一些小数字,例如 5
然后,我尝试执行一个只包含以下内容的 shell 脚本:
#!/bin/bash
echo hi
sleep 3
Run Code Online (Sandbox Code Playgroud)
通过标准输入发送“./test.sh\n”并等待结果。同时,我正在使用ps --ppid <somepid> -o pid=列出第一个的子PID。
这总是因错误而失败bash: fork: retry: No child processes。我已经尝试将限制设置为 RLIM_INFINITY 以查看创建了多少个子进程,但只列出了一个(自然是 shell 处理 test.sh)。
如何正确限制子进程的数量(或更一般地说,限制某种 fork 炸弹)?我知道 cgroups 和其他类似的替代品,但我正在尝试写这个来学习,这种行为真的让我感到困惑。
我认为这可能是由于 RLIMIT_NPROC 的文档说明它限制了“最大进程数(或者,更准确地说,在 Linux 上,线程数)”和正在创建的大量线程,但该程序仅在我将 RLIMIT_NPROC 增加到 500 时才有效左右,这似乎不太合理。
如果此行为是意外的,则可能是编码错误,在这种情况下,我将尝试清理测试代码以在此处发布。
我有简单的 test.php 页面:
<pre><?php system("ls -la /tmp"); ?></pre>
Run Code Online (Sandbox Code Playgroud)
它总是只显示:.和..文件夹,浏览器中没有其他内容。
在命令行中:
1) ls -la /tmp
2) sudo -u http ls -la /tmp
3) php test.php
4) sudo -u http php test.php
Run Code Online (Sandbox Code Playgroud)
所有这些命令都返回目录文件/子目录的完整列表。
这是什么原因???
问题与“/tmp”文件夹相关,因为ls -lah /usr工作正常。
我在 4 个 comps 上对此进行了测试(其中一个是带有 php 5.0.6 的 debian,并且 php 像我预期的那样显示所有文件,其他 3 个 comps 有 php7 并显示空的 /tmp)。
更新:
即使在将 http 添加到 sudoers 文件并运行 'sudo ls /tmp' 之后,问题在 php 版本 >7 上也是一样的。
但是乳宁“系统( “回声AAA> /tmp/aaa.txt; LS -la / TMP”)所示 …