コミュニティソリューション

ZimaOSのアプリ権限スイッチの本当の役割

IceWhale support explained that the App Privileges switch gives a container host-like permissions, direct hardware access, and root-level execution.

ZimaOSアプリの「Privileges」スイッチは、実質的にDockerの特権モードです。IceWhaleのサポートによると、この設定を有効にすると、コンテナにホストと同等の権限、ハードウェアへの直接アクセス、rootレベルのケーパビリティが付与されます。アプリケーションが実際にそのレベルのアクセスを必要とする場合に限り、有効にしてください。

ほとんどのアプリでは特権モードは不要で、コンテナの安全性を高める分離が弱まります。コンテナにすべてを許可するのではなく、デバイスを1つマッピングするか、Linuxケーパビリティを1つ追加してください。

特権モードで変わること

DockerのDocker特権コンテナガイドによると、--privilegedを指定すると、コンテナにすべてのLinuxケーパビリティとすべてのホストデバイスへのアクセス権が付与され、主要なセキュリティ制御も緩和されます。

IceWhaleがホストレベルのアクセスと説明した理由

公式の回答では、コンテナ内のプロセスはホストのハードウェアに直接アクセスでき、root相当の権限で実行できると説明されています。これは簡潔で分かりやすい説明ですが、実際のセキュリティへの影響はさらに広範です。コンテナの強力なサンドボックス化が失われます。

原因不明のエラーを解決するためだけに特権を有効にしない

アプリがUSBデバイス、GPU、ネットワーク機能、またはマウントにアクセスできない場合は、まず不足している権限を正確に特定してください。特権モードでは、本当の設定上の問題が見えにくくなる一方、ホスト全体がさらされるおそれがあります。

デバイスは個別にマッピングする

devices:
  - /dev/dri/renderD128:/dev/dri/renderD128

ハードウェアデバイスを1つ使う場合は、ホストの全デバイスではなく、そのデバイスだけをマッピングしてください。

Linuxケーパビリティは個別に指定する

cap_add:
  - NET_ADMIN

VPN・ルーター用のコンテナでは、特定のネットワーク機能が必要になる場合があります。アプリのドキュメントで可能な場合は、特権モードではなく必要最小限の機能だけを付与してください。

正当な理由でより広いアクセス権が必要になるアプリ

低レベルのハードウェアツール、Docker-in-Docker、一部のVPN・ネットワークアプライアンス、USB・デバイス管理、専用のシステム監視ソフトウェアなどが該当します。それでも、まずはアップストリームのデプロイ手順を確認してください。

通常は特権モードを必要としないアプリ

通常のWebアプリ、メディアライブラリ、メモアプリ、データベース、写真管理アプリ、ダッシュボード、そしてほとんどのAPIサービスは、動作するために特権モード全体を必要としません。

アプリ更新後に特権設定を見直す

古いアプリパッケージでは、上流でより限定的な権限が追加された後も、便宜上、特権モードが有効になっていることがあります。更新時には、現在のCompose要件を再確認してください。

Dockerのセキュリティガイドで、カスタムアプリに適したより安全な方法を紹介しています。

アクセス権を追加する前にコンテナを調べる

docker inspect CONTAINER

既存のデバイスマッピング、機能、マウント、ネットワークモード、ユーザー設定を確認してください。多くのアプリで問題が起きるのは、無制限のホストアクセスが必要だからではなく、必要なデバイスやパスが欠けているためです。

特権モードは被害範囲を広げる可能性がある

通常の非特権Webアプリが侵害された場合、コンテナの分離によって攻撃者がアクセスできる範囲を制限できます。特権コンテナは、より多くのホストデバイスやカーネルインターフェースにアクセスできるため、そのアプリの脆弱性がシステム全体に影響を及ぼす可能性があります。

特権を有効にする理由を記録する

意図的に有効にする場合は、それを必要とする具体的な機能を記録してください。後日アプリを更新する際に、より限定的な権限で実行できるか再テストし、不要になっていればスイッチをオフにしてください。

よくある質問

「特権」とは、コンテナがrootとして実行されるという意味ですか?

これは、コンテナ内でrootとして実行するだけの場合よりも広範です。特権モードでは、ホストの機能やデバイスに広範囲にアクセスできます。

カスタムアプリすべてで有効にすべきですか?

いいえ。上流のドキュメントでワークロードに必要だと記載されていない限り、オフのままにしてください。

GPUやUSBだけにアクセスを許可できますか?

はい。特権モードを全面的に使うのではなく、必要なデバイスマッピングやランタイム設定だけを指定してください。

特権モードは危険ですか?

コンテナの分離が大幅に弱まるため、権限を侵害されたアプリがホストに与える影響がはるかに大きくなる可能性があります。