技術的な説明非特権コンテナとは何ですか?かなり良いです。ただし、通常のPCユーザーには適していません。非特権コンテナを使用しなければならない時期と理由、そして利点と欠点は何であるかについての簡単な答えはありますか?
答え1
権限のないコンテナーを実行することは、本番環境でコンテナーを実行する最も安全な方法です。コンテナはセキュリティに関して悪い評価を受けていますが、その理由の1つは、ユーザーがコンテナからroot権限を取得すると、ホストでもroot権限を取得できることを一部のユーザーが発見したことです。デフォルトでは、権限のないコンテナが実行するのは、ホスト上のユーザーIDをマスクすることです。権限のないコンテナーの場合、非rootユーザーはコンテナーを作成でき、コンテナーではrootとしてマークされますが、ホストはユーザーIDをマップするターゲットに関係なく、ユーザーID 10000としてマークされます。私は最近これについてブログ投稿を書いています。スティーブン・グレイバーのブログLXCシリーズ(LXCの優れた人材/リーダー開発者の一人であり、確かに注目すべきシリーズ)。繰り返します。素晴らしいです。
私のブログから:
コンテナ内:
lxc-attach -n ubuntu-unprived
root@ubuntu-unprived:/# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 04:48 ? 00:00:00 /sbin/init
root 157 1 0 04:48 ? 00:00:00 upstart-udev-bridge --daemon
root 189 1 0 04:48 ? 00:00:00 /lib/systemd/systemd-udevd --daemon
root 244 1 0 04:48 ? 00:00:00 dhclient -1 -v -pf /run/dhclient.eth0.pid
syslog 290 1 0 04:48 ? 00:00:00 rsyslogd
root 343 1 0 04:48 tty4 00:00:00 /sbin/getty -8 38400 tty4
root 345 1 0 04:48 tty2 00:00:00 /sbin/getty -8 38400 tty2
root 346 1 0 04:48 tty3 00:00:00 /sbin/getty -8 38400 tty3
root 359 1 0 04:48 ? 00:00:00 cron
root 386 1 0 04:48 console 00:00:00 /sbin/getty -8 38400 console
root 389 1 0 04:48 tty1 00:00:00 /sbin/getty -8 38400 tty1
root 408 1 0 04:48 ? 00:00:00 upstart-socket-bridge --daemon
root 409 1 0 04:48 ? 00:00:00 upstart-file-bridge --daemon
root 431 0 0 05:06 ? 00:00:00 /bin/bash
root 434 431 0 05:06 ? 00:00:00 ps -ef
ホストから:
lxc-info -Ssip --name ubuntu-unprived
State: RUNNING
PID: 3104
IP: 10.1.0.107
CPU use: 2.27 seconds
BlkIO use: 680.00 KiB
Memory use: 7.24 MiB
Link: vethJ1Y7TG
TX bytes: 7.30 KiB
RX bytes: 46.21 KiB
Total bytes: 53.51 KiB
ps -ef | grep 3104
100000 3104 3067 0 Nov11 ? 00:00:00 /sbin/init
100000 3330 3104 0 Nov11 ? 00:00:00 upstart-udev-bridge --daemon
100000 3362 3104 0 Nov11 ? 00:00:00 /lib/systemd/systemd-udevd --daemon
100000 3417 3104 0 Nov11 ? 00:00:00 dhclient -1 -v -pf /run/dhclient.eth0.pid -lf /var/lib/dhcp/dhclient.eth0.leases eth0
100102 3463 3104 0 Nov11 ? 00:00:00 rsyslogd
100000 3516 3104 0 Nov11 pts/8 00:00:00 /sbin/getty -8 38400 tty4
100000 3518 3104 0 Nov11 pts/6 00:00:00 /sbin/getty -8 38400 tty2
100000 3519 3104 0 Nov11 pts/7 00:00:00 /sbin/getty -8 38400 tty3
100000 3532 3104 0 Nov11 ? 00:00:00 cron
100000 3559 3104 0 Nov11 pts/9 00:00:00 /sbin/getty -8 38400 console
100000 3562 3104 0 Nov11 pts/5 00:00:00 /sbin/getty -8 38400 tty1
100000 3581 3104 0 Nov11 ? 00:00:00 upstart-socket-bridge --daemon
100000 3582 3104 0 Nov11 ? 00:00:00 upstart-file-bridge --daemon
lxc 3780 1518 0 00:10 pts/4 00:00:00 grep --color=auto 3104
ご覧のとおり、プロセスはコンテナ内でルートとして実行されていますが、ルートとして表示されるのではなく、ホストシステムでは100000として表示されます。
要約すると、次のようになります。利点 - セキュリティ強化とセキュリティ分離の強化。欠点 - 最初は少し混乱しているので、初心者のユーザーには適していません。
答え2
これは非常に貴重なテスト、サンドボックス、パッケージングツールです。機密性の高い個人ファイルにアクセスせずに、作業環境でWebサーバーを安全にロックしたいですか?容器を使用してください。あなたのアプリケーションには、以前のバージョンのライブラリと他のアプリケーションと互換性のない特定の設定ファイルが必要ですか?またコンテナ。デフォルトではchrootが完了しました。これにより、サービスを独立して維持することができ、各サービスをより簡単に維持でき、既存のシステムを中断することなくサービスを別のコンピュータに移動またはコピーできます。
欠点は、ほとんどすべてがコンテナにローカルなので、名前空間を覚えておく必要があることです。自分がどこにいるのかを知る必要があり、コンテナ間の通信も不可能です。これはモジュール性が必要ですが、仮想マシンのオーバーヘッドを必要とせずにコンテナに保存することがそれほど重要ではない場合に最適です。
「一般」ユーザーの場合、コンテナを使用して、2人の人が1つのシステムを使用しながら、まったく別のシステムにいるかのように動作するようにすることができます。たとえば、ルームメイトを考えてみましょう。
答え3
共有カーネルを使用すると、攻撃者が何らかの方法で(またはむしろ攻撃サーフェスを制限するのに役立ちます)解放する必要性が高まりますが、権限のないコンテナはまだホストのルートを取得する直接ハッカーと完全に比較できません。 。しかし、分離。
したがって、これは少し間違った仮定/主張です。しかし、インターネット上の多くのユーザーは依然としてinetサービスを実行できる技術的能力レベルにありますが、実際にはさまざまな方法でそれを実行する技術的能力はありません。 :)