まず、サンドボックス ソフトウェアとしてBubblewrapを使用していますが、bubblewrap よりも一般的な実装の問題のように感じます。実行されるテスト以外の詳細は重要ではありません。
特定のテストの 1 つは、"/foo/bar" からサンドボックス / をマウントしようとします。これには、data と bin の 2 つのサブディレクトリが含まれます。
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 を開けませんでした。
これをさらにデバッグして、サンドボックス内の対話型シェルにドロップするために必要なマウント/パスを追加しました
$ /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 を実行すると、すべてが期待どおりにマウントされていることが示されます。r/w のテストは問題ありません。ただし、問題は /data ディレクトリが完全に空であることです (「touch /data/testwrite」の出力を除く)。マウントしたかった元の /data パーティションには、実際にはファイルが含まれていることに注意してください。
Q. ここの取り付けがよくわからないのですが?それともテストが間違っていますか?私が見ることができる唯一の回避策は、元の ro /data から新しく書き込みマウントされた /data にファイルをコピーすることです