LXC(Linuxコンテナー)の間に顕著な違いはありますか?および FreeBSDのジェイルのセキュリティ、安定性&パフォーマンス?
最初にどちらのアプローチも非常によく似ています。
コメント
- LXCはかなり新しいテクノロジーなので、刑務所でのセキュリティと安定性の向上を期待しています。パフォーマンスについての推測です。たとえば、selinuxを使用して軽減できるLXCの既知のセキュリティ問題がいくつかあります。個人的にはLXCが好きです。
- @PavelŠimerda今日LXCについて聞いたばかりですが、 HerokuとおそらくGoogleAppEngineの両方がすでにLXCを使用していることを知って驚いた。
- ' LXCにぶつかったばかりの場合は、Dockerを見てください。ボンネットの下でLXCを使用します: docker.io/the_whole_story
- Dockerはnを実行しますotはlxcを使用しなくなりました。
- @nwildner ' liblxcは使用しなくなりましたが、まったく同じ概念、つまりカーネル名前空間を使用しています。
回答
ここで使用されている派手な名前に関係なく、どちらも特定の問題の解決策です。従来のUnixよりも優れた分離ソリューション chroot 。オペレーティングシステムレベルの仮想化、コンテナ、ゾーン、または「ステロイドを使用したchroot」は、ユーザースペース分離の同じ概念を定義する名前または商用タイトルですが、機能が異なります。
Chrootは1982年3月18日に導入されました。 、インストールとビルドシステムをテストするためのツールとしての 4.2 BSD のリリースの数か月前ですが、今日でもまだ欠陥があります。 chrootの最初の目的は、 newroot パスを提供することだけだったため、分離または制御する必要のあるシステムの他の側面(ネットワーク、プロセスビュー、I / Oスループット)が明らかになりました。ここに最初のコンテナ(ユーザーレベルの仮想化)が登場しました。
どちらのテクノロジー(FreeBSD JailsとLXC)も、ユーザースペースの分離を利用して別のセキュリティレイヤーを提供します。この区分化により、決定されたプロセスが同じホスト上の同じコンテナ内の他のプロセスとのみ通信するようになり、ネットワークリソースを使用して「外界」通信を実現する場合、すべてがこのコンテナに割り当てられたインターフェイス/チャネルに転送されます。
機能
FreeBSD Jails:
- 4.0以降のFreeBSD内の機能であるため、安定したテクノロジーと見なされます。
- jailのクローンを作成してジェイルテンプレートでより多くのジェイルを簡単にデプロイできます。さらにいくつかの ZFSの狂気;
- 十分に文書化されています、および進化する;
- 階層型ジェイルを使用すると、ジェイル内にジェイルを作成できます(さらに深く掘り下げる必要があります)。
allow.mount.zfs
と組み合わせてより強力になり、children.max
のような他の変数は最大の子刑務所を定義します。 - rctl(8)は、jailのリソース制限(メモリ、CPU、ディスクなど)を処理します。
- FreeBSDjailはLinuxを処理しますユーザースペース;
-
vnet
によるネットワーク分離。これにより、各刑務所が独自のネットワークスタック、インターフェース、アドレス指定およびルーティングテーブル; -
nullfs
は、フォルダーを実サーバー上にあるフォルダーにリンクして、刑務所内に配置するのに役立ちます。 - ezjail ユーティリティ。jailの大量展開と管理に役立ちます。
- 多くのカーネル調整可能ファイル(
sysctl
)。security.jail.allow.*
パラメータは、そのjailのrootユーザーのアクションを制限します。 - FreeBSD jailは、ライブマイグレーションが近い将来。
- ZFSとDockerの統合にはある程度の努力が必要です。ランニング。まだ実験的です。
- FreeBSD 12 は、刑務所内のbhyveと刑務所内のpfをサポートし、これらのツールをさらに分離します。
- ここ数年、多くの興味深いツールが開発されました。それらのいくつかは、このブログ投稿で索引付けされています。
- 代替案: FreeBSDVPSプロジェクト
Linuxコンテナ(LXC):
- 新しい「カーネル内」テクノロジーですが、大きなもの(特にCanonical)によって承認されています。
- 非特権コンテナ。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 。プロジェクトの調整を維持するために、lxdは2.0バージョンをリリースしました。一部の機能は zfs関連です。
- 代替案: OpenVZ 、 Docker
- Docker 。ここで、Dockerは名前名、cgroupを使用して、「アプリごと」/「ソフトウェアごと」の分離を作成することに注意してください。 。主な違いここ。LXCは複数のプロセスでコンテナーを作成しますが、Dockerはコンテナーを可能な限り単一のプロセスに減らしてからDockerを介して管理します。
- DockerをSELinuxと統合し、コンテナー内の機能を減らして安全性を高める取り組み- DockerとSELinux、Dan Walsh
- Docker、LXD、LXCの違いは何ですか
LXC1以降の
Dockerはlxcを使用しなくなりました。 runc 。
どちらのテクノロジーもセキュリティの万能薬ではありませんが、どちらも分離するための非常に優れた方法です。オペレーティングシステムインフラストラクチャが混在しているため、完全仮想化を必要としない環境。セキュリティは、OSレベルのvirtが提供するカーネルチューナブル、MAC、および分離の多くのドキュメントの読み取りと実装の後に提供されます。
関連項目:
- 手作りのコンテナ
- BSD Now:刑務所について知っておくべきことすべて
- ezjail –刑務所管理フレームワーク
- コンテナの簡単な歴史:1970年代から2017年まで
- ドッカーは有害だと考えている-コンテナテクノロジーを取り巻くセキュリティサーカスについての良い記事。
コメント
- 箱から出してすぐに、適切なゲスト分離を提供するためのlxcによる努力はありません。ただし、 lxd は、BSDjailやSolarisゾーンのような分離を提供しようとします。
- lxdは"より優れたエクスペリエンスです"、その上に他の機能を追加。ただし、ここでこの小さな男を引用するのは良いことのようです
- @allquixoticテンプレートから作成された変更されていない構成を使用する場合はどうでしょうか?本当ですが、特権のない(ユーザー対応)コンテナーはLXC 1.xで利用可能であり、
root
が所有している(したがって、場所が特定されている)場合は、システムの起動時に自動起動することもできます。コンテナのシステム全体の場所にあります)。