首先,我使用Bubblewrap作为沙盒软件,但我觉得这是一个普遍的安装问题,而不是一个 bubblewrap。我正在尝试将 bwrap 添加到名为 sandboxlib的沙盒包装器中,除了运行的测试之外,细节并不重要。
一项特定的测试尝试从“/foo/bar”安装沙箱 /。这包含 2 个子目录,data 和 bin。
bin 目录只包含一个名为“test-file-is-writable”的简单二进制文件。
如果我运行:
$ /usr/bin/bwrap --ro-bind /foo/bar / --tmpfs /data test-file-is-writable data/1/canary
无法打开 data/1/canary 进行写入。
但是,安装/作为可写作品
$ /usr/bin/bwrap --bind /foo/bar / --tmpfs /data test-file-is-writable data/1/canary
将数据写入 data/1/canary。
但是,我只希望 /data 是可写的,并假设 / 的其余部分是 ro
以只读方式添加重新安装仍然不能解决问题
$ /usr/bin/bwrap --ro-bind /foo/bar / --tmpfs /data --remount-ro / test-file-is-writable data/1/canary
无法打开 data/1/canary 进行写入。
进一步调试,我添加了放入沙箱内的交互式 shell 所需的挂载/路径
$ /usr/bin/bwrap --bind /foo/bar / --tmpfs /data --ro-bind /lib /lib --ro-bind /lib64 /lib64 --ro-bind /bin /usr/bin - -remount-ro / bash
运行一个简单的 ls of / 显示一切都按预期安装。测试 r/w 没问题。然而,问题是 /data 目录完全是空的(除了我的 'touch /data/testwrite' 的输出)。注意我想挂载的原始 /data 分区,实际上包含文件。
问:我不明白这里的安装吗?还是测试错了?我能看到的唯一解决方法是将文件从原始 ro /data 复制到新写入的 /data