目的は、ホストLinuxシステム内で移動された(再配置された)ディストリビューション(/がグローバル/と一致してはいけません)にプログラムをインストールして実行することです。これらのプログラムは他の/を使用するのに適していません。
fakechrootはシステムコールレベルで機能するのではなくライブラリの置き換えを使用するため、完全なソリューションではありません(したがって静的にリンクされたバイナリには適していません)。
答え1
ソリューションはptraceまたはネームスペース(共有解除)。
ptraceベースのソリューションは、名前空間/非共有ベースのソリューションよりも効率が悪くなる可能性があります(ただし、後者の技術は最先端の技術であるため、まだうまくいかない場合があります)。
ptraceベース
UMView
ptrcedベースのソリューションについては、以下のコメントに感謝します。https://stackoverflow.com/a/1019720/94687、UMViewが見つかりました。
- http://wiki.virtualsquare.org/wiki/index.php/ViewFS
- http://wiki.virtualsquare.org/wiki/index.php/Virtual_installation_of_software
リンクされたドキュメントでは、ホストfsの「記録中のコピービュー」を取得する方法について説明します。これはchrootを実行するのとまったく同じではありません。 umviewで実装/交換する方法の正確な手順は、私の質問に対する回答でよく説明されています(この方法がわかっている場合は書いてください!)。
umviewはUbuntuとDebianに含まれているので、オープンソースでなければなりません。http://packages.ubuntu.com/lucid/umview。
「制限された計画」
別の実装は以下に説明される。http://www.cs.vu.nl/~rutger/publications/jailer.pdf、http://www.cs.vu.nl/~guido/mansion/publications/ps/secrypt07.pdf。
chrootに似た効果を持つ変更ルートポリシールールCHRDIRがあります。 (「監禁方針」セクション)
ただし、ソースコードを公開していない可能性があります(部分的に修正されたstraceに基づいています)。http://www.liacs.nl/~wichert/strace/- 「実装」セクション)...
ジョルディ
ジョディ(http://www.eelis.net/geordi/、https://github.com/Eelis/geordi)は、刑務所に閉じ込められたプログラムでシステムコールのファイルパラメータを必須として無視できるように変更できます。
根
プロット既製の ptrace ベースのツールです。http://proot.me/:
chrootに対応
特定のLinuxディストリビューションでコマンドを実行するには、ゲストrootfsへのパスとともにprootを提供し、その後に必要なコマンドを入力します。次の例では、catプログラムを実行してファイルの内容を印刷します。
proot -r /mnt/slackware-8.0/ cat /etc/motd Welcome to Slackware Linux 8.0
指定しない場合、デフォルトのコマンドは/bin/shです。したがって、対話型シェルとそのサブルーチンの両方を制限する最も短い方法は次のとおりです。
proot -r /mnt/slackware-8.0/ $ cat /etc/motd Welcome to Slackware Linux 8.0
共有のキャンセルに基づいて
Linuxカーネルでのuser_namespacesのサポートこの質問を受けて以来、はるかに成熟しました。これでchroot
、次の助けを借りて、通常どおりに実行できます。unshare
unshareを使用したchrootシミュレーション:
unshare --user --map-root-user --mount-proc --pid --fork
chroot ......
su - user1
答え2
あなたは試すことができますユーザーモードLinux。これらのカーネルを構築するためのコードは現在主流のソースにあり、私がリンクしたページで(古い)プリコンパイルされたバージョンを見つけることができます。