回答:
LXCについて見てきたように、コンテナ情報と(デフォルトのバッキングストアを使用して)ルートファイルシステムが/ var / lib / lxcの下に保存されます。コンテナー作成テンプレートは、キャッシュされた配布情報を/ var / cache / lxcに格納する傾向もあります。
そのため、一般に、ルートファイルシステムへのアクセスは、作成中に誤用または誤った構成ユーザープロファイルがない限り、管理者にのみ許可されます。
しかし、Ubuntu開発者はすでにこの時点に達している可能性があり、AppArmorの助けを借りて安全なソリューションを提供しています。
LXCには、コンテナー内の特権の偶発的な誤用からホストを保護することを目的としたApparmorプロファイルが付属しています。たとえば、コンテナは/proc/sysrq-trigger
ほとんどの/sys
ファイルに書き込むことも、書き込むこともできません。
usr.bin.lxc-startプロファイルは、lxc-startを実行して入力します。このプロファイルは、主にlxc-startがコンテナーのルートファイルシステムの外部に新しいファイルシステムをマウントするのを防ぎます。コンテナーのinitを実行する前に、LXCはコンテナーのプロファイルへの切り替えを要求します。デフォルトでは、このプロファイルはで定義されているlxc-container-defaultポリシーです/etc/apparmor.d/lxc/lxc-default
。このプロファイルは、コンテナーが多くの危険なパスにアクセスしたり、ほとんどのファイルシステムをマウントしたりするのを防ぎます。
Apparmorポリシーによって拒否されている正当なアクセスが原因でlxc-startが失敗していることがわかった場合は、次のようにしてlxc-startプロファイルを無効にできます。
sudo apparmor_parser -R /etc/apparmor.d/usr.bin.lxc-start
sudo ln -s /etc/apparmor.d/usr.bin.lxc-start /etc/apparmor.d/disabled/
これにより、lxc-startは制限なく実行されますが、コンテナー自体は引き続き制限されます。コンテナーの制限も無効にしたい場合は、usr.bin.lxc-start
プロファイルを無効にするだけでなく、以下を追加する必要があります。
lxc.aa_profile = unconfined
コンテナの設定ファイルに。カスタムプロファイルでコンテナを実行する場合は、で新しいプロファイルを作成できます/etc/apparmor.d/lxc/
。lxc-startがそのプロファイルに移行できるようにするには、その名前がlxc-で始まる必要があります。ポリシーを作成した後、次を使用してロードします。
sudo apparmor_parser -r /etc/apparmor.d/lxc-containers
プロファイルはファイルから取得されるため、再起動後に自動的に読み込まれます/etc/apparmor.d/lxc-containers
。最後に、コンテナCNでこのnewを使用lxc-CN-profile
するには、次の行を構成ファイルに追加します。
lxc.aa_profile = lxc-CN-profile
lxc-execute
Apparmorプロファイルは入力しませんが、それが生成するコンテナは制限されます。
dmesg
(少なくともデフォルトの構成では)任意のコンテナから呼び出すことができることがわかりました。セキュリティのリスクはそれだけではないようです...