ここで使用する派手な名前に関係なく、どちらも特定の問題の解決策です。従来のUnixより優れた分離ソリューション chroot 。オペレーティングシステムレベルの仮想化、コンテナー、ゾーン、または「ステロイドを使用したchroot」でさえ、ユーザー空間の分離という同じ概念を定義する名前または商用タイトルですが、機能は異なります。
Chrootは 4.2 BSD のリリースの数か月前の1982年3月18日に、そのインストールとビルドシステムをテストするツールとして導入されましたが、今日でもまだ欠陥があります。 chrootの最初の目的はnewrootパスを提供することだけだったので、分離または制御する必要があるシステムの他の側面が明らかになりました(ネットワーク、プロセスビュー、I/Oスループット) 。これは、最初のコンテナー(ユーザーレベルの仮想化)が登場した場所です。
両方のテクノロジー(FreeBSD JailsおよびLXC)は、ユーザー空間の分離を利用して、セキュリティの別のレイヤーを提供します。この区分化により、特定のプロセスが同じホスト上の同じコンテナ内の他のプロセスとのみ通信することが保証されます。ネットワークリソースを使用して「外界」通信を実現する場合、すべてがこのコンテナに割り当てられたインターフェース/チャネルに転送されます持っています。
特徴
FreeBSD刑務所:
- 4.0以降のFreeBSD内の機能であるため、安定したテクノロジと見なされます。
- Jailのクローンを作成して jailテンプレート を作成し、より多くのjailを簡単にデプロイできるようになる時点で、ZFSファイルシステムの中で最も優れたものになります。もう少し ZFS狂気 ;
- 十分に文書化されています 、および evolving ;
- 階層型の刑務所では、刑務所内に刑務所を作成できます(さらに深くする必要があります!)。
allow.mount.zfs
と組み合わせてより多くのパワーを実現し、children.max
などの他の変数は最大子監獄を定義します。 - rctl(8) は、jailのリソース制限(メモリ、CPU、ディスクなど)を処理します。
- FreeBSDの刑務所はLinuxを処理します serspace ;
vnet
によるネットワークの分離。各jailが独自のネットワークスタック、インターフェース、アドレス指定およびルーティングテーブルを持つことができます。nullfs
は、実サーバー上にあるフォルダーと刑務所内のフォルダーをリンクするのに役立ちます。- ezjail 刑務所の大量展開と管理を支援するユーティリティ。
- 多くのカーネル調整パラメータ(
sysctl
)。 security.jail.allow.*
パラメータは、その刑務所のrootユーザーのアクションを制限します。 - おそらく、FreeBSDの刑務所は ライブマイグレーション のようなVPSプロジェクト機能のいくつかを近い将来に拡張するでしょう。
- ZFSとDocker integration の実行に多少の努力が必要です。まだ実験段階です。
- FreeBSD 12 刑務所内のbhyveおよび刑務所内のpfをサポートし、これらのツールをさらに分離します。
- ここ数年、たくさんの興味深いツールが開発されました。それらのいくつかは このブログ投稿 で索引付けされています。
- 代替案:FreeBSD VPSプロジェクト
Linuxコンテナ(LXC):
- 新しい「カーネル内」テクノロジですが、大きなテクノロジ(特にCanonical)によって承認されています。
- 非特権コンテナ LXC 1.0以降、コンテナ内のセキュリティに大きな一歩を踏み出しました。
- コンテナー内のUIDおよびGIDマッピング。
- カーネル名前空間。IPC、マウント、pid、ネットワーク、ユーザーを分離します。これらの名前空間は分離された方法で処理できます。この場合、 別のネットワーク名前空間 を使用するプロセスは、ストレージなどの他の側面で必ずしも分離されません。
- コントロールグループ(cgroups)は、リソースを管理し、それらをグループ化します。 CGManager はそれを達成するための人物です。
- コンテナからアクセス可能なカーネル機能をより適切に実施するためのApparmor/SELinuxプロファイルとカーネル機能。 Seccompは、システムコールをフィルターするlxcコンテナーでも使用できます。その他のセキュリティ面 ここ 。
開発中のライブマイグレーション機能。 docker/lxcはユーザースペースのプロセスの一時停止、スナップショット、移行、統合を処理する必要があるため、本番環境でいつ使用できるようになるかを判断するのは非常に困難です- ref1 、 ref2 。 ライブマイグレーション 機能している 基本的なコンテナー(デバイスパススルーも複雑なネットワークサービスも特別なストレージ構成もなし)。- Python3および2、lua、Go、RubyおよびHaskellでの開発を可能にするAPIバインディング
- 一元化された「新機能」エリア。いくつかのバグが修正されたかどうか、または新しい機能がコミットされたかどうかを確認する必要がある場合は、かなり役に立ちます。 ここ 。
- 興味深い代替案は lxd です。これは内部ではlxcで動作しますが、REST api、OpenStack統合などのいくつかの素晴らしい機能を備えています。
- もう1つの興味深いことは、Ubuntuが 16.04 のコンテナのデフォルトのファイルシステムとしてzfsを出荷しているようだということです。プロジェクトを調整し続けるために、lxdは2.0バージョンをリリースしました、そしていくつかの機能は zfs関連 です。
- 代替案: OpenVZ 、 Docker
- Docker 。 Dockerは名前空間を使用し、cgroupは「アプリごと」/「ソフトウェアごと」の分離を作成することに注意してください。主な違い ここ 。 LXCは複数のプロセスを持つコンテナーを作成しますが、Dockerはコンテナーを可能な限り1つのプロセスに減らし、Dockerを介してそれを管理します。
- DockerをSELinuxと統合し、コンテナー内の機能を減らしてコンテナーをより安全にするための取り組み- Docker and SELinux、Dan Walsh
- Docker、LXD、およびLXCの違いは何ですか
Dockerはlxcを使用しなくなりました。これで、低レベルのカーネル名前空間およびcgroups機能との統合を直接処理する runc と呼ばれる特定のlibができました。
どちらのテクノロジーもセキュリティ万能薬ではありませんが、どちらも、オペレーティングシステムのインフラストラクチャが混在しているために完全仮想化を必要としない環境を分離するためのかなり良い方法です。セキュリティは、これらのOSレベルの仮想化によって提供されるカーネル調整パラメータ、MAC、および分離の多くのドキュメントの読み取りと実装の後に行われます。
関連項目: