Docker | Chroot Jailの問題Node.jsタイプホスティング

Docker | Chroot Jailの問題Node.jsタイプホスティング

まあ、私はDockerを使用していますが、まだChroot刑務所に慣れていません。

Debian/Node.jsのDockerイメージがインストールされています。しかし、私はすべてのDebianユーザーがDockerのrootアクセスなしで自分のNode.jsアプリケーションを実行できることを願っています。

例:

  1. ユーザー:プレハブ牛革
  2. 家:/家/ジミー
  3. シェル:/bin/bash

だからプレハブ牛革これで、Node.jsアプリケーションを実行できます。/bin/bashシェル。ただし、システム全体を変更することもできます(たとえば、「rm -R / etc」を実行できます)。私は正しいですか?

その後、たとえば変更できます。ジミーシェル:/usr/sbin/nologinまた、Web UIでのみNode.jsインスタンスを起動/停止するオプションを提供しましたが、... Node.jsの "fs"モジュールを使用してシステム全体を変更できました。私は正しいですか?

今私が正しいなら、2つの選択肢があります

  1. 「chroot刑務所」を作れると思いました。プレハブ牛革。だから/home/jimmyはchroot刑務所になります。彼はNode.jsアプリケーションを実行できますが、システム全体を変更することはできません。 Node.js "fs"は/home/jimmyに制限されています。私は正しいですか?
  2. 気にしないでください。ジミーのために新しいDockerコンテナを初期化してください...大丈夫です。しかし、私の考えでは、=新しいコンテナ=新しいシステム=より多くのデータ(MB)

さて、最初のオプションが私に必要なものだと言う人がいるなら、それは大丈夫です。 jimmyがポート8080を使用してNode.js Webサーバーを実行し、他のユーザーが同じポートを使用している場合、どのようにポートをバインドしますか? Dockerを使用すると、コンテナが起動する前にこの問題を処理できると思いました。

ベストアンサー1

ユーザーログインについていくつかの誤解があるようです。

Nodejs経由/bin/bashまたは直接アクセスするユーザーは、変更権限を持つファイルのみを変更できます。ほとんどは/etcbyが書き込めないため、ディレクトリ全体に jimmyアクセスできません。rm

を使用するのが正しいです/usr/sbin/nologin。ユーザーはシステムにログインできません。この場合、Nodejsアクセス用にWeb UIを実行するときにWeb UIがアクセスしたくないか、ユーザーがアクセスできるファイルへのアクセスを許可しないことを確認する必要があります。

どのソリューションを選択しても、同じIPアドレスとポートで複数のサービスを実行することはできません。異なるIPアドレスの同じポートにサービスをバインドするか、別のポートを使用できます。解決策は、各ユーザーがそのポートで実行できるようにし、各サービスのプロキシとして機能するWebサーバーを構築することです。

Dockerの使用について話しましたが、使用している可能性のあるユーザーの制限はわかりませんが、なぜDockerを使用しないのかわかりません。追加の分離およびネットワーク管理機能を備えたchrootに非常に似ています。 Dockerはデフォルトで単一のサービスを実行するように設計されているため、各ユーザーにはNodejsインスタンスを実行するための独自のコンテナがあります。

Dockerがオプションではなく、これを正しく実行できると確信している場合は、chrootを使用することをお勧めします。それ以外の場合は、どこでも適切な権限を持つマルチユーザーログインを提供する単一のシステムで、お客様の要件を満たすことができます。

おすすめ記事