2016-10-07 6 views
-2

TL; DR(Dockerコンテナを使用する必要がありますか)では、インタラクティブマルチユーザ環境を作成します。質問は少し珍しいので、ここにいくつかの背景があります:インタラクティブマルチユーザ環境としてのドッカー

昨年私は大学で情報セキュリティを教え、各学生はカスタムイメージを持つ仮想マシンをインストールし、ダウンロードして「解凍」演習をしなければなりませんでしたさまざまなセキュリティ機能が無効にされ、補助ライブラリがインストールされていたため)、ソリューションを「パック」してアップロードします。

私たちは、100人以上の学生を抱えており、これらのステップのそれぞれについて、本当に驚異的な数の問題を抱えていました。正直言って、すべてが学生のせいではありませんでした。一部のラップトップはVMを本当にドラッグしてしまい、ドライバーの問題などがありました。

私は代替手段を考えました:サーバーのような集中環境SSH。これは、登録と割り当ての配布とコレクションを本当にスムーズにすることができますが、どのようにそのようなシステムを設計しますか?

最初は、私は別のユーザー(つまり、adduser <student-id>)について考えましたが、いくつかの問題があります(リソース割り当てなどの適切な構成で解決できるものもありますが、ルート特権を得た生徒が実際のPE(特権エスカレーション)を利用すると、他の生徒のものにアクセスすることができます。

私は獄について考えましたが、ネットワークに脆弱性があり、他の生徒のパケットを見ている(そして干渉している可能性がある)生徒は望ましくありません。

だから、仮想化。しかし、100以上のVMを実行して管理することは、私が楽しみにしていることではありません(そして、私は大学のITが扱うことができないと確信しています...)。

しかし、私はドッカーについて聞いた!各環境は隔離されており、独自のネットワークを持ち、軽量であると思われます。しかし! Dockerの本来の目的は、対話型の環境ではなくアプリケーションを簡単に配備することです。たとえば、SSHをコンテナに入れることをお勧めします。

私の質問はこれです:生徒一人につき真のUbuntuコンテナをセットアップし、SSHサーバー(学生一人あたり別のポートにマップされています)とそれ自身のネットワークを設定し、これらのコンテナにログインして作業しますが、これまでの私の読書からは、悪い習慣(つまり、「あなたのコンテナにSSHを入れないでください!」など)のように思えます。そのようなソリューションが悪いとみなされる関連する理由(セキュリティ、パフォーマンス、または何か他のもの)はありますか?

+0

なぜ人々が下降投票しているのかを聞きたいのなら、コメントの中でそれを行うのが最善です - 有権者自身が長くなくなっているので、回答は得られないかもしれません。私たちは、投稿には投票やその他のメタコメントに異議がないことを尋ねます。ログインしないか投票しない読者にとっては興味がありません。 – halfer

+1

FWIW個人的に私はそれがOKだと思うが、あなたは努力と考えを持っていると確信しているが、質問は少し広いかもしれないという見方からDVが来るかもしれないと思う。 – halfer

+0

申し訳ありませんが、説明のためにありがとうございます。 –

答えて

1

Dockerとセキュリティは、正確にはbest friendsではありません。この記事の概要では、ユーザーをDockerグループに追加すると、ホスト上の任意のファイルに対する読み取り/書き込みアクセス権が自動的に付与され、管理者に効果的になります。

また、そのリンクは単なる例に過ぎません。その意味でDockerには数多くの問題があります。おそらく、完全にboycott Dockerになる必要はありませんが、探しているVMの代わりに「簡単で信頼性の高い」代替手段ではありません。

あなたの広い質問に対するかなり短い具体的な答えは、それをしないことです。あなたの主な関心事がセキュリティの場合は、バーチャルマシンとそれを管理するための "オフシェルフ"ソリューションを利用する方がよいでしょう。

+0

答えをありがとう!しかし、あなたが投稿したリンクがどのように関係しているかわかりません。学生はSSH *をコンテナに入れます。私はこれを適切に構成して固めることができます(うまくいけば)。彼らはホストへの* no *アクセス権を持っています。 (私は生徒がカーネルの脆弱性を利用してマシンを引き継ぐのではなく、ハイパーバイザーでもできることを心配していません)単純なsudoとtcpdumpではあまり気にならないと心配しています) なぜ私がダウン投票権を得ているのか、それを取得しないために何を変えるべきなのか分かっていれば、私は知りたいと思う...私はあまりに精通していない。) もう一度ありがとう! –

+0

月曜日にもう少しフィードバックをいただきます。 – GhostCat

+0

@GhostCat:Andreasのブログからのリンクをありがとう。特権を持たないホストユーザが制限されたユーザ権限を尊重するDockerコンテナを公開できるようにするための努力はありますか?私は自分でDockerを使い始めました。これは知っておくと便利な情報のようです。 – halfer

3

ドッカーはここでは面白い解決策かもしれません。はおそらくSSHデーモンそのものですが、それは各Dockerコンテナが別のポートでリスンする必要があることを意味します。あなたのポート設定は、あなたのDockerfile(おそらくenv varsを注入できる?)とあなたのコンソールのdocker runコマンドの両方にあるでしょう。

use Supervisord or something similarは、生徒一人につき1つのコンテナが残っていることを確認し、死んだ場合は自動的に再生成されます。

GhostCatの回答で提供されているリンクを読むと、誰でもDockerコンテナの展開アクセスに効果的にホストに対するルート書き込み権限があるという点で、Dockerに対する主な反対はセキュリティだと思われます。ただし、上記のソリューションでは、ホスト上にユーザーを作成する必要はありません。そのため、(自分以外の)グループにdockerグループアクセスを許可するユーザーはいません。

利用可能なサーバーによっては、デスクトップコンピュータをDockerサーバーとして設定し、教授用LANにセットアップする方が簡単です。たとえば、8Gが利用可能な場合は、すべてのコンテナに十分な場合があります(ただし、デフォルトで各コンテナの内容を確認する必要があります)。

ドッカーの初心者としては、私はたぶん前述のスーパーバイザーから始めて、あなたの100個のコンテナを持ってくることができます。しかし、一度それが働いたら、Google's Kubernetesを調べることができます。これは、コンテナの複数のインスタンスをスピンアップするように設計されています。しかし、あなたがPython/PHP/Perlスクリプトを使ってSupervisord設定ファイルを生成することができれば、これは過度の可能性があります!

+0

ええ、それは私が考えていたものです。私はSupervisordをチェックします、リードのおかげで。ポートについては、私は各コ​​ンテナが別のポートでリッスンする必要はないと考えています。ホストの異なるポートをコンテナのポート22(つまり、-p10001:22、-ip10002:22、...)にマップするだけで、生徒にホストにアクセスさせることができます。コンテナ。 –

+1

うん、それは右@ダンについて聞こえる。 Supervisordを使用しているtbhはそれを簡単に保つことができますが、私はスウォームを回転させることについての追加のメモを追加しました。ホスト上のメモリ要件を確認するには、ほんの数回スピンアップする価値があります。あなたのコンテナOSとしてAlpineのようなものを使って、私はメモリ要件がコンテナあたり数MBのオーダーであることを発見したので、非常に効率的です。 – halfer

関連する問題