回答:
非特権コンテナの実行は、実稼働環境でコンテナを実行する最も安全な方法です。セキュリティに関して言えば、コンテナは評判が悪く、その理由の1つは、ユーザーがコンテナのルートを取得すると、ホストのルートを取得する可能性があることを発見したためです。基本的に、非特権コンテナが行うことは、ホストからのユーザーIDをマスクすることです。特権のないコンテナでは、非rootユーザーはコンテナを作成でき、コンテナとしてrootとして所有および表示されますが、ホスト(たとえば、ユーザーIDをマップするもの)ではuserid 10000として表示されます。私は最近、LXC のStephane Graberのブログシリーズ(LXCの優秀な開発者の1人であり、間違いなくフォローする人)に基づいて、これに関するブログ記事を書きました。繰り返しますが、非常に素晴らしいです。
私のブログから:
コンテナから:
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として表示されています。
要約すると、利点-セキュリティが追加され、セキュリティの分離が追加されました。欠点-初心者ユーザーではなく、最初は頭を包むのが少し混乱します。
これらは、テスト、サンドボックス化、カプセル化のための非常に貴重なツールです。ウェブサーバーを独自の作業環境で安全にロックし、機密のプライベートファイルにアクセスできないようにしたいですか?コンテナを使用します。古いバージョンのライブラリと特定の構成ファイルを必要とするアプリケーションがあり、他のアプリケーションと互換性がありませんか?コンテナも。基本的にはchrootが正しく行われます。サービスを十分に個別に維持できるため、それぞれの保守がはるかに簡単になり、既存のシステムを乱すことなく別のマシンに移動またはコピーできます。
欠点は、ほとんどすべてがコンテナに対してローカルであるため、名前空間を覚えておく必要があることです。自分がどこにいるのかを意識する必要があり、コンテナ間の通信は簡単ではありません。モジュール性が必要であるが、仮想マシンのオーバーヘッドを望まない場合は良い考えです。また、コンテナに保管するものは実際にはあまり関係ありません。
「通常の」ユーザーの場合は、コンテナを使用して、完全に異なるマシン上にあるかのように保ちながら、2人で1台のマシンを使用できます。たとえば、ルームメイト。