Linux LXC対FreeBSD刑務所


62

LXC(Linuxコンテナ)FreeBSDの刑務所の間に、セキュリティ、安定性、パフォーマンスの面で顕著な違いはありますか?

一見すると、両方のアプローチは非常によく似ています。


1
LXCはかなり新しいテクノロジーであるため、刑務所のセキュリティと安定性が向上することを期待しています。パフォーマンスについても推測しません。たとえば、LXCには、selinuxを使用して軽減できる既知のセキュリティ問題がいくつかあります。私は個人的にはLXCが好きです。
パベルシメルダ14

1
@PavelŠimerda今日LXCについて聞いたばかりですが、HerokuとおそらくGoogle App Engineの両方がすでにLXCを使用していることを知って驚きました。
フィリップクラッセン14

3
LXCにぶつかったばかりの場合は、ボンネットの下でLXCを使用するDockerをご覧ください
Kev

1
Dockerはlxcを使用しなくなりました。

1
@nwildnerはliblxcを使用しなくなりましたが、まったく同じ概念であるカーネル名前空間を使用します。
0xC0000022L

回答:


101

ここで使用される派手な名前に関係なく、どちらも特定の問題に対する解決策です。古典的なUnix chrootよりも優れた分離ソリューションです。オペレーティングシステムレベルの仮想化、コンテナ、ゾーン、または「ステロイド付きのchroot」は、ユーザースペース分離の同じ概念を定義する名前または商用タイトルですが、機能は異なります。

Chrootは、インストールとビルドシステムをテストするためのツールとして、4.2 BSDのリリースの数ヶ月前の1982年3月18日に導入されましたが、現在でもまだ欠陥があります。chrootの最初の目的は新しいルートパスを提供することだけであったため、分離または制御する必要があるシステムの他の側面(ネットワーク、プロセスビュー、I / Oスループット)が明らかになりました。これは、最初のコンテナ(ユーザーレベルの仮想化)が登場した場所です。

両方のテクノロジー(FreeBSD JailsおよびLXC)は、ユーザー空間の分離を利用して、セキュリティの別のレイヤーを提供します。この区分化は、決定されたプロセスが同じホスト上の同じコンテナ内の他のプロセスとのみ通信することを保証し、ネットワークリソースを使用して「外の世界」通信を達成する場合、すべてがこのコンテナに割り当てられたインターフェイス/チャネルに転送されます持っています。

特徴

FreeBSD刑務所:

  • これは4.0以降のFreeBSD内の機能であるため、安定した技術と見なされています。
  • jailを複製し、jailテンプレートを作成してより多くのjailを簡単にデプロイできる時点で、ZFSファイルシステムのベストを活用します。もう少しZFSの狂気
  • 十分に文書化され進化しています。
  • 階層型刑務所では、刑務所内に刑務所を作成できます(さらに深くする必要があります!)。と組み合わせてallow.mount.zfsより多くのパワーを実現し、他の変数children.maxはmax children jailを定義します。
  • rctl(8)は、jail(メモリ、CPU、ディスクなど)のリソース制限を処理します;
  • FreeBSD刑務所はLinux ユーザー空間を処理します。
  • によるネットワークの分離。vnet各jailが独自のネットワークスタック、インターフェイス、アドレス指定、およびルーティングテーブルを持つことができます。
  • nullfs 実サーバー上にあるフォルダーと刑務所内のフォルダーをリンクするのに役立ちます。
  • 刑務所の大量展開と管理を支援するezjailユーティリティ。
  • 多数のカーネル調整パラメータ(sysctl)。security.jail.allow.*パラメーターは、そのjailのrootユーザーのアクションを制限します。
  • おそらく、FreeBSDの刑務所は、近い将来、ライブマイグレーションなどのVPSプロジェクト機能の一部を拡張するでしょう。
  • ZFSとDockerの統合の実行にはある程度の努力が必要です。まだ実験的です。
  • FreeBSD 12は、jail内のbhyveとjail内のpfをサポートし、これらのツールをさらに隔離します
  • ここ数年、多くの興味深いツールが開発されました。それらのいくつかは、このブログ投稿で索引付けされています。
  • 代替案: FreeBSD VPSプロジェクト

Linuxコンテナ(LXC):

  • 新しい「カーネル内」テクノロジーですが、大きなテクノロジー(特にCanonical)によって承認されています。
  • LXC 1.0以降の非特権コンテナは、コンテナ内のセキュリティに大きな一歩を踏み出します。
  • コンテナ内のUIDおよびGIDマッピング。
  • IPC、マウント、pid、ネットワーク、ユーザーを分離するためのカーネル名前空間。これらの名前空間は、切り離された方法で処理できます。異なるネットワーク名前空間を使用するプロセスは、ストレージなどの他の側面で必ずしも分離されません。
  • リソースを管理し、グループ化するためのコントロールグループ(cgroup)。CGManagerはそれを達成するための男です。
  • コンテナからアクセス可能なカーネル機能をより適切に実施するためのApparmor / SELinuxプロファイルおよびカーネル機能。Seccompは、システムコールをフィルタリングするためにlxcコンテナでも使用できます。ここで他のセキュリティ局面。
  • 開発中のライブマイグレーション機能。docker / lxcはユーザースペースのプロセスの一時停止、スナップショット、移行、統合-ref1ref2を処理する必要があるため、本番環境で使用できるようになる時期を言うのは非常に困難です。ライブマイグレーション基本的なコンテナーで機能します(複雑なネットワークサービスや特別なストレージ構成のいずれもデバイスパススルーなし)。
  • python3および2、lua、Go、Ruby、Haskellでの開発を可能にするAPIバインディング
  • 一元化された「新機能」エリア。何らかのバグが修正されたか、新しい機能がコミットされたかを確認する必要がある場合はいつでも非常に便利です。こちら
  • 興味深い代替はできLXDフードの下LXCで動作していること、しかし、それはいくつかの素晴らしいのREST APIなどの機能、OpenStackの統合などがあります
  • 別の興味深い点は、Ubuntuが16.04のコンテナのデフォルトのファイルシステムとしてzfsを出荷しているようだということです。プロジェクトの整合性を保つために、lxdは2.0バージョンをリリースしました。一部の機能はzfs関連です。
  • 代替案OpenVZDocker
  • Docker。ここでDockerは名前空間を使用し、cgroupは「アプリごと」/「ソフトウェアごと」の分離を作成することに注意してください。ここで重要な違い。LXCは複数のプロセスでコンテナーを作成しますが、Dockerはコンテナーを可能な限り単一のプロセスに縮小し、Dockerで管理します。
  • DockerをSELinuxと統合し、コンテナ内の機能を削減してより安全にする努力-DockerおよびSELinux、Dan Walsh
  • Docker、LXD、LXCの違いは何ですか

Dockerはlxcを使用しなくなりました。現在、低レベルのカーネル名前空間とcgroups機能との統合を直接処理するlibcontainerという特定のライブラリがあります。

どちらの技術もセキュリティの万能薬ではありませんが、オペレーティングシステムインフラストラクチャが混在しているため、完全仮想化を必要としない環境を分離するには、どちらも非常に優れた方法です。セキュリティは、OSレベルのvirtが提供するカーネル調整パラメータ、MAC、および分離の多くのドキュメントを読んで実装した後に実現します。

参照:


1
箱から出してすぐに、適切なゲストの分離を提供するlxcの努力はありません。ただし、lxdは、BSD jailやSolarisゾーンのような分離を提供しようとします。
-allquixotic

lxdはLXCの「より良い体験」であり、その上に他の機能を追加します。ただし、この小さな男

@allquixoticは、テンプレートから作成された変更されていない構成を使用する場合ですか?本当ですが、非特権(ユーザー対応)コンテナーはLXC 1.xで利用可能で、所有されているroot(したがって、コンテナーのシステム全体の場所にある)場合、システムの起動時に自動起動することさえできます。
0xC0000022L
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.