非特権コンテナの利点と欠点は何ですか?


回答:


14

非特権コンテナの実行は、実稼働環境でコンテナを実行する最も安全な方法です。セキュリティに関して言えば、コンテナは評判が悪く、その理由の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として表示されています。

要約すると、利点-セキュリティが追加され、セキュリティの分離が追加されました。欠点-初心者ユーザーではなく、最初は頭を包むのが少し混乱します。


3
したがって、正しく理解できれば、コンテナはそれ自体で100%安全ではありません。どのコンテナを実行しても、獣が脱出できる可能性があります。コンテナの種類が重要になるのはここだけです。特権コンテナの場合、獣はルートの下で野生で実行され、ルートキットを植え付け、貴重なSSLキーをむしゃむしゃします。非特権の場合、コンテナを作成したユーザーアカウントのみに制限されますよね?彼のSSHキーなどを盗む。それは本当に安全ですか?ネストされた4つのボックスの写真で説明できますか?
アナトリーテクトニック

2
要するに、コンテナ自体は箱から出してすぐに本番用に安全ではありません。LXC環境を他のLinux環境と同様に扱います。Linuxボックスを大きく開いたままにしないでください!はい、コンテナはユーザーアカウントがマップされているものにのみ制限されます。特権のないconatinersに関するGraberの投稿をチェックしてください。最大の問題は、すべてのコンテナーが同じカーネルを共有しているため、カーネルとsyscallsを悪用できることです。cgroupおよびselinux、apparmor、seccompなどのその他のアプリケーションを介してセキュリティを強化する方法はいくつかあります。
オタク

3
StéphaneGraber- stgraber.org/2014
01

そのため、コンテナを実行するための別の制限ユーザーを作成します。公平だ。これを答えとして受け入れます。ありがとう。
アナトリーテクトニック

4

これらは、テスト、サンドボックス化、カプセル化のための非常に貴重なツールです。ウェブサーバーを独自の作業環境で安全にロックし、機密のプライベートファイルにアクセスできないようにしたいですか?コンテナを使用します。古いバージョンのライブラリと特定の構成ファイルを必要とするアプリケーションがあり、他のアプリケーションと互換性がありませんか?コンテナも。基本的にはchrootが正しく行われます。サービスを十分に個別に維持できるため、それぞれの保守がはるかに簡単になり、既存のシステムを乱すことなく別のマシンに移動またはコピーできます。

欠点は、ほとんどすべてがコンテナに対してローカルであるため、名前空間を覚えておく必要があることです。自分がどこにいるのかを意識する必要があり、コンテナ間の通信は簡単ではありません。モジュール性が必要であるが、仮想マシンのオーバーヘッドを望まない場合は良い考えです。また、コンテナに保管するものは実際にはあまり関係ありません。

「通常の」ユーザーの場合は、コンテナを使用して、完全に異なるマシン上にあるかのように保ちながら、2人で1台のマシンを使用できます。たとえば、ルームメイト。


3
コンテナが何のためにあるのかについての人間の良い説明ですが、これはまだ特権コンテナと非特権コンテナの違いを説明していません。
アナトリーテクトニック

1

まあ、共有カーネルでは、敵の要件をいくつかの方法で解放する(または、むしろ攻撃面を制限するのに役立ちます)にもかかわらず、非特権コンテナは、これにもかかわらずホストルートを取得するストレートハックから完全に隔離されていません。

そのため、それは少し間違った仮定/主張です。そうは言っても、インターネット上の多くのユーザーの技術的適性のレベルは、実際には技術的に不可能な多数の方法でinetサービスを実行します。:)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.