ここで使用される派手な名前に関係なく、どちらも特定の問題に対する解決策です。古典的な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はユーザースペースのプロセスの一時停止、スナップショット、移行、統合-ref1、ref2を処理する必要があるため、本番環境で使用できるようになる時期を言うのは非常に困難です。ライブマイグレーションは基本的なコンテナーで機能します(複雑なネットワークサービスや特別なストレージ構成のいずれもデバイスパススルーなし)。
- python3および2、lua、Go、Ruby、Haskellでの開発を可能にするAPIバインディング
- 一元化された「新機能」エリア。何らかのバグが修正されたか、新しい機能がコミットされたかを確認する必要がある場合はいつでも非常に便利です。こちら。
- 興味深い代替はできLXDフードの下LXCで動作していること、しかし、それはいくつかの素晴らしいのREST APIなどの機能、OpenStackの統合などがあります
- 別の興味深い点は、Ubuntuが16.04のコンテナのデフォルトのファイルシステムとしてzfsを出荷しているようだということです。プロジェクトの整合性を保つために、lxdは2.0バージョンをリリースしました。一部の機能はzfs関連です。
- 代替案:OpenVZ、Docker
- Docker。ここでDockerは名前空間を使用し、cgroupは「アプリごと」/「ソフトウェアごと」の分離を作成することに注意してください。ここで重要な違い。LXCは複数のプロセスでコンテナーを作成しますが、Dockerはコンテナーを可能な限り単一のプロセスに縮小し、Dockerで管理します。
- DockerをSELinuxと統合し、コンテナ内の機能を削減してより安全にする努力-DockerおよびSELinux、Dan Walsh
- Docker、LXD、LXCの違いは何ですか
Dockerはlxcを使用しなくなりました。現在、低レベルのカーネル名前空間とcgroups機能との統合を直接処理するlibcontainerという特定のライブラリがあります。
どちらの技術もセキュリティの万能薬ではありませんが、オペレーティングシステムインフラストラクチャが混在しているため、完全仮想化を必要としない環境を分離するには、どちらも非常に優れた方法です。セキュリティは、OSレベルのvirtが提供するカーネル調整パラメータ、MAC、および分離の多くのドキュメントを読んで実装した後に実現します。
参照: