chrootを使用する際の注意事項はありますか?

chrootを使用する際の注意事項はありますか?

私は使うアーキテクチャLinux主要なオペレーティングシステムとしてWebアプリケーションを開発します。セントース。最初は、LXC Container次のようにArchで実行しました。セントースしかし、Wi-Fiなどによるネットワーク構成の問題により、代替案を探すことにしましたchroot

現在、LXCコマンドを使用してセントースそしてちょうどchroot飛び込んで働いてください。また/bind/procおよびを/sysインストールしましたchroot。私のWebアプリケーションは問題なくうまく動作します。

このアプローチに問題/警告がありますか?私はこのような高度なことを試したことがありませんJava JVM。私はそれがホストシステムのカーネルを使用していることを知っており、System CallsLinuxで以前のバージョンと互換性があると思います(これがこのアイデアが機能する理由です)。したがって、すべてが期待どおりにスムーズに機能する必要があります。

使用の問題が発生する可能性がある状況がまだあるかどうか疑問に思いますchrootchroot通常のシステムのように動作しない可能性があるシナリオはありますか?論理的に、カーネルが以前のバージョンと互換性がある限り、何も表示されません。私が考えることができる1つの場所は、ホストシステムのカーネルが元のカーネルとは異なる実装を持ち、一般的に可能性のないバグがある場合です。

私が使うときアーチ、全体的な見方を聞きたいです。私の主なアイデアは、これを使用しない同僚にお勧めすることです。セントースいくつかの理由で基本オペレーティングシステムとして使用されます。 64ビットシステムの代わりに32ビットシステムを使用する必要があるいくつかのユースケースがあります。それらの多くは仮想マシンなどを設定するのに多くの時間を費やしていますが、LinuxがLinuxを「仮想化する」ためにこれは本当に必要ですか?私は個人的にchrootこれが単純なデバッグツール以上の役割を果たしていると思いますが、専門家の意見を聞きたいです。

答え1

Chrootはコンテナではなく、ファイルシステムのビューを変更するだけです。ネットワークはまだ同じで、デバイスも同じで、pidも同じで、uidも同じで、ルートはまだルートです。

これは、chroot内で行われた操作がより広いシステムに影響を与える可能性があることを意味します。 chrootでデーモンを起動してポートにバインドすると、chrootだけでなくシステム全体でそのポートを占有します。 chroot内でkilllallを使用している場合(またはスクリプト)、chroot以外のプロセスも終了します。

特に、chrootにパッケージをインストール/アップグレードすると、デーモンが意図せず起動したりデーモンを起動できなくなり、インストールプロセスが失敗する可能性があります。誤って作成されたスクリプトは、chrootでバージョンを開始する前にホストシステムのデーモンをシャットダウンして、多くの混乱を引き起こす可能性があります。 (私は少なくとも数年前に、電子メールがどこにも行かないようで、私は最終的に「ローカルメールのみ」で構成されたchrootでMTAによって処理されていることを発見しました。

一部のディストリビューションには、chroot 起動デーモンからパッケージのインストールを停止するメカニズムがありますが、詳細は明らかにディストリビューションによって異なります。

答え2

chrootコンテナではなく、プロセスをシステムの残りの部分から完全に分離しません。 chrootディレクトリにマウントされている場合、/procそのchrootで開始されたプロセスはchrootの外部で実行されているプロセスを表示できます。

つまり、大丈夫なら、chroot説明した状況を正確に処理するように設計されています。実際にDebianがマルチアーキテクチャサポートを提供するまで、64ビットシステムで32ビットアプリケーションを実行するための推奨方法は、32ビットchrootを作成し、少なくとも32ビットDebianベースをインストールすることです。

関連情報