1

ホストUbuntuでARMターゲット用にコンパイルすることを楽しみにしています。
http://www.raspberrypi.org/phpBB3/viewtopic.php?f=31&t=8478

上記のリンクは、chroot を使用し、プログラムをホスト上のターゲットのルートファイル システムに直接コンパイルするように述べています。

スクラッチボックスのような刑務所仮想環境を使用することを提案する人もいます。
特定のターゲット プラットフォーム用のクロス コンパイル環境のセットアップ

https://en.wikipedia.org/wiki/Chroot

The chroot mechanism is not intended to defend against intentional tampering by privileged (root) users. On most systems, chroot contexts do not stack properly and chrooted programs with sufficient privileges may perform a second chroot to break out. To mitigate the risk of this security weakness, chrooted programs should relinquish root privileges as soon as practical after chrooting, or other mechanisms – such as FreeBSD Jails - should be used instead. Note that some systems, such as FreeBSD, take precautions to prevent the second chroot attack.[1]
So i am investigating on it for few days here i am not able to understand what above statement means. 

1> chroot に対する仮想刑務所環境の正確な利点は何ですか?

2> chroot は、開いているすべての端末に影響しますか?それとも、コマンドが実行されている特定の端末に影響しますか?

3> スクラッチボックスや chroot のように、Jail のクロスコンパイルには正確に何を使用すればよいでしょうか。

4

1 に答える 1

1

ウィキペディアでは、chroot のセキュリティについて説明しています。これは、chroot がサンドボックス (chroot を提供しない)やその他のセキュリティを分離して提供する目的で比較されることが多いためです。
chroot() (UNIX システム コール)は、見かけのルート ディレクトリ ( /) を、システム コールが指す別のディレクトリに変更するプロセスです。これは、/dir/target への chroot された実行可能ファイルが load /lib/ld-linux.so.2(実行可能ファイルのハードコードされたパス)にアクセスしたい場合、実際のアクセスは次の場所に発生する/dir/target/lib/ld-linux.so.2
ことを意味します。したがって、プログラムがアクセスする必要がある各ファイルとライブラリには、通常のアクセスが必要であることを意味しますchroot されたパス(この例では /dir/target )への実際のパス(先頭に)/. chroot 内で完全なシステムを使用すると、最終的に で説明されているディレクトリ構造になりますが、(chroot されたプログラムの場合) chroot されたパスman hierが前に付けられます。また、異なるアーキテクチャの異なるバイナリを使用できることも意味します(CPU が複数のバイナリをサポートしている場合、一種の分離を提供するなど)。

chroot を見るとわかるように、主な目的はセキュリティを提供することではなく、Linux の initramfs ルートからディスク上のマウントされたルートに切り替える他の目的に使用されます (プロセス mount -o がある場合を除く)。動く)。
ただし、ウィキペディアの記事で述べられているように、FreeBSD などの特定の実装では、特定のレベルのセキュリティを提供することを選択しています。たとえば、chroot 内で 2 番目の chroot を作成する可能性を無効にします。ウィキペディアは、chroot を root として実行する必要があると言っているのは間違っています。今日のほとんどのシステムには、ユーザー/グループのアクセス許可よりも細かいメカニズムがあります。

刑務所は分離を直接提供するように設計されており、プロセスが使用する RAM と CPU の量を制限できます。共有メモリを無効にする。パーミッションを制限します...
一部の実装 (sandbox コマンドなど) は chroot を提供しません。刑務所には、オペレーティング システム レベルの仮想化、または特別なコードのテスト時にシステムの残りの部分への損傷を回避する用途があります。
サンドボックス コマンドの例を見ると、代替ルート ディレクトリ構造を単独で使用できないことがわかります。

http://www.raspberrypi.org/forums/viewtopic.php?f=31&t=8478はqemu-userに言及しています。これは明らかにプログラムをラズベリーパイに置くことなくテストするためのものです。ここではハードウェアが仮想化されていないため、仮想マシンとは異なります。プログラムのバイナリ命令はネイティブ命令に変換されます。つまり、プログラムがネイティブに実行されたかのようにシステムコールが処理されます。
ここで、異なるルート ディレクトリ構造を使用する必要があります。一部の共有オブジェクト ファイルのパス名は、すべてのディストリビューションとアーキテクチャで共通です(のように/lib/ld-linux.so.2) 。. 複数のアーキテクチャを同じバイナリに混在させることはできません。共有ライブラリを ARM に相当するものに置き換えると、ファイルはネイティブ実行可能ファイルとして使用できなくなります。同じ理由で、qemu-user またはターゲット システム全体を静的にコンパイルする必要があります。

binfmtをインストールしてセットアップすることを強くお勧めします。qemu-arm-static コマンドを自動的に起動することで、マシンと同じアーキテクチャを持っているかのようにプログラムを実行できるようになります...
次に、ネイティブ ARM コンパイラを内部にインストールするだけで、クロスコンパイルせずにソフトウェアをコンパイルしたい場合があります。あなたのchroot。

于 2014-04-09T00:06:37.747 に答える