web-dev-qa-db-ja.com

最小限のLXCコンテナを高度で安全なchrootとして使用してサービスを分離する

まず第一に、私はセキュリティの専門家ではなく、これまでLXCを使用したことはありません。

Gentooで強化されたサーバーを可能な限り強化しようとしています。そのために、LXCをKVMと組み合わせて使用​​し、可能な限り多くのネットワークサービスを分離することを考えています。

LXC unixのマニュアルページを読みましたが、Linuxコンテナがどのように設定されているかはまだわかりません。詳細についてインターネットを調べたところ、Linuxコンテナ内でシステム全体を実行することに関するドキュメントしか見つかりませんでした。これは私がやりたいことではありません。

LXCを使用したいのは、コンテナー内で1つのアプリケーションのみを実行することです。これには、アプリケーションに必要な最小限のファイル/リソースのみが含まれます。私はnotシステム全体をコンテナ内で実行し、busyboxを使用しないようにします。

たとえば、ntpdサービスを分離したいのですが、システムクロックを同期できることがわかっている限り、VM内で実行することはできません。しかし、chroot内で実行することも、Linuxコンテナー内で実行して、分離とセキュリティを向上させることもできると思います。
そうするために私はしなければならないでしょう:

  1. Chrootjailを設定するときにntpdが必要とするファイルを特定します。
  2. 何をどのように行うかわからない場合:LXC構成、テンプレート、コンテナーをセットアップするためのファイルの配置場所など。
  3. lxc-executeで実行します

それは何か可能ですか?そのようなコンテナを構築、実行、管理するためのさまざまな手順は何でしょうか?

3
kuroneko

歴史的に、LXCには、真に分離することを妨げる多くの目覚ましいセキュリティ問題がありましたが、メインラインLinuxカーネルのインフラストラクチャの強化により、これらの懸念のほとんど(すべてではないにしても)が軽減されました。

LXCをバンドルする後続のUbuntuリリースで観察されたセキュリティ問題/拡張機能の概要については、 ここ を参照してください。

this Oracle Unbreakable Enterprise Kernelのドキュメントは、アプリケーションレベルのコンテナの実行方法を説明するのに特に役立つことがわかりました。

ドキュメントから:

アプリケーションコンテナは、テンプレートスクリプトを使用して作成されません。代わりに、アプリケーションコンテナは、ホストのルートファイルシステムのすべてまたは一部をマウントして、アプリケーションが必要とするバイナリとライブラリへのアクセスを提供します。 lxc-executeコマンドを使用して、コンテナー内のlxc-init(/ sbin/initのカットダウンバージョン)を呼び出します。 lxc-initは、/ proc、/ dev/shm、/ dev/mqueueなどの必要なディレクトリをマウントし、指定されたアプリケーションプログラムを実行して、実行が終了するのを待ちます。アプリケーションが終了すると、コンテナインスタンスは存在しなくなります。

5
allquixotic