私はそれをunshare
ローカルプロセスにマウントするのと同じタスクを実行するために使用します。ルートアクセスは不要、例えば:
unshare -mr bash mount --bind a b
(はい、これは少し愚かなようです。実際のユースケースでは、unshare
バインドマウントを実行するbashスクリプトを実行しています。
ただし、インストールを繰り返しようとすると失敗します。
ryan@DevPC-LX ~/stuff/util-linux master $ unshare -mr mount -o loop x.img a
mount: no permission to look at /dev/loop<N>
:/
mknod
偽のループデバイスを作成し(root以外のユーザーは取得できない権限が必要です)、手動で実行しlosetup
(まだroot権限が必要です)、うまくいかないいくつかの操作を試しました。
もちろんそうすることもできますがchown myuser /dev/loop*
、深刻なセキュリティ問題になる可能性があります。
また、guestmount
私のユースケースに比べて遅すぎてfuseext2
書き込みモードでデータが失われる可能性に関する警告が表示されます(また遅すぎます)。
これを行う方法はありますか?ありますか?
ベストアンサー1
明らかにわかるように、ループインストールの作成は2つのステップで構成されています。
- ループ機器の設定
- インストールする
もちろん、myuser /dev/loop* を chown することもできますが、これは主なセキュリティ問題になる可能性があります。
私はこれが適切なループデバイスの作成を可能にすると信じています(アクセス権限を与えることによって/dev/loopcontrol
)。ループデバイスの表示に影響を与える可能性のある名前空間の種類があるかどうか疑問に思います。これにより、これをより安全に実行できます。
ステップ2はまだ試すことができません。ユーザーネームスペースを使用すると、ユーザーは新しいマウントを作成できる新しいマウントネームスペースを作成できますが、非常に制限されています。CAP_SYS_ADMIN
初期名前空間でブロックデバイスをまだインストールする必要があります。user_namespaces(7)
言ったように…
ただし、ブロックベースのファイルシステムのマウントは、初期ユーザーネームスペースにCAP_SYS_ADMINを保持するプロセスによってのみ実行できます。
ループデバイスはファイルベースのブロックデバイスなので、まだ使用できません。これは残念であり、安全に作業する方法があるべきだと思います。しかし、私の考えではここには複雑な問題がたくさんあるようだ(特に setuid)これがまだ実装されていない理由です。
私が理解したところによると、実際にできることは問題を解決するだけです。おそらく画像からファイルを抽出し(最悪の状況が発生し、特定の形式を直接処理するためのツールがない場合は、一時仮想マシンにインストールしてこれを実行できます)、結果ディレクトリをバインドマウントできます。