これは高度なプロセスであり、Linux を初めて使用するユーザーにはおすすめしません。
ChromeOS は、VM 内での任意のコードの実行をサポートしています。これは、そのサポートに関する低レベルのドキュメントです。よりユーザー フレンドリーなビューについては、faqをご覧ください。
前提条件
- ChromeOS デバイスが ChromeOS で Linux をサポートしていることを確認します。
-
ChromeOS リリース 72(M72 以降)(2019 年 2 月リリース)以降を使用していることを確認します。
- 必要に応じてシステム アップデートを開始し、再起動します。
- これは Stable チャンネルで動作します。
- デベロッパー モードにする必要はありません。
- Linux コンテナを有効にする
ランタイム機能
Linux コンテナを実行すると、次の機能が動作します。
- アウトバウンド ネットワーク接続(IPv4)。
- アクセラレーションされていないグラフィック。
- アクセラレーション グラフィック(OpenGL 経由)。
- Wayland プログラム(推奨、Sommelier 経由)。
- X プログラム(Sommelier と XWayland による互換性)。
- M74+ の音声出力と、R79+ イメージの試験運用中のキャプチャ/マイク。
必要な機能がない
現在、多くの取り組みを進めています。明確な例をいくつかご紹介します。
- 動画のハードウェア デコード。
- IME。
他にも検討中の事項はありますが、ChromeOS チームは、システム全体のセキュリティが損なわれないように、新しい機能のロールアウトに慎重に取り組んでいます。ChromeOS での Linux 開発に関するほとんどのトピックを網羅した詳細については、Crostini に関するよくある質問をご覧ください。
セキュリティ
任意のコードの実行は通常セキュリティ上のリスクとなりますが、ChromeOS チームは、ChromeOS コンテナ上の Linux で採用されているランタイム モデルによって、そのセキュリティ リスクが十分に軽減され、封じ込められていると考えています。仮想マシン(VM)はセキュリティ境界であり、その内部のすべては信頼できないと見なされます。現在の VM ゲスト イメージは、コンテナのセキュリティをさらに強化するためにカスタム強化カーネルも実行していますが、これはシステム全体のセキュリティを確保するために依存するものではなく、便利な機能と見なされています。
このモデルでは、ChromeOS システムの残りの部分は、VM 内のコンテナ内で実行される任意のコード(悪意のあるコードまたは偶発的なコード)から保護された状態を維持する必要があります。
外部との唯一の接点は crosvm 経由であり、各チャンネルは個々のプロセスと通信します(各プロセスは厳重にサンドボックス化されています)。
コンテナ内のユーザーデータ
クラウド サービスへの移行に伴い、現在のセキュリティの考え方では、デスクトップやノートパソコンを攻撃するよりも、アカウント認証情報(Google や Facebook のパスワードなど)を取得する方が攻撃者にとって有利であることが強調されています。間違ってはいません。現在の VM/コンテナ ChromeOS ソリューションでは、この点が改善されていません。簡単に言うと、コンテナに入力されたものはすべて、現時点ではユーザーの責任となります。そのため、安全でないコンテナや不正使用されたコンテナを実行し、そのコンテナにパスワードを入力すると、ChromeOS システムの他の部分が安全な状態であっても、パスワードが盗まれる可能性があります。
プロセスの永続性
VM とコンテナのプロセスはログアウト後も存続せず(ユーザーの暗号化されたストレージに存在するため)、自動的に終了します。また、ログイン時に自動的に開始されることもなく(永続的な攻撃を回避するため)、起動時に自動的に実行されることもありません(ログイン セッションがないため)。これは、ユーザーの暗号化されたストレージに保存されているため、アクセスできないためです。
実行可能で書き込み可能なコード
Termina VM ディスク イメージは、他の Chrome コンポーネントと同様に、書き込み可能なステートフル パーティションにダウンロードされます。コンテンツが変更されないように、dm-verity が使用されます。これは、Google が署名したイメージのみが読み込まれ、イメージは常に読み取り専用であることを意味します。
ハードウェア攻撃
Meltdown/Spectre の脆弱性は、VM の安全な使用に影響します。Google は、VM がホストシステムや他の VM を攻撃できないように、修正と緩和策を適用しました。詳しくは、Chromium OS の Wiki ページにある ChromeOS デバイスの Meltdown と Spectre の脆弱性ステータスをご覧ください。
ライフサイクル
Linux コンテナを有効にすると(Termina などの必要なコンポーネントのインストールも行われます)、システムを使用できるようになります。
これらのコンポーネントはインストールされますが、すぐに実行されることはありません。ログアウトすると、すべてがシャットダウンされて終了し、ログインしても何も自動的に再起動されません。
ターミナル アプリや、コンテナを起動する他の Linux アプリを実行したときに、親コンテナがまだ実行されていない場合は、Termina VM が自動的に起動され、その中で ChromeOS のデフォルトの Linux コンテナ(Crostini とも呼ばれます)が起動されます。これにより、SSH または SFTP(ファイル アプリ経由)でコンテナに接続できます。
表示されているすべてのアプリケーションを閉じても、VM/コンテナはシャットダウンされません。必要に応じて、デフォルトのコンテナだけでなく、手動で停止と起動を行ったり、より多くのコンテナを生成したりできます。
データの永続化
作成されたすべての VM とコンテナ、およびそれらのコンテナ内のデータは、ユーザー セッション(ログアウト/ログイン)間で保持されます。他のブラウザデータと同じユーザーごとの暗号化されたストレージに保存されます。
VM またはコンテナが正常に停止または強制終了された場合(停電など)、データが失われる可能性があり、システム内の他のものと同様に復元が必要になることがあります。
デバイスのサポート
ChromeOS 上の Linux をすべての Chromebook で動作させたいところですが、必要なカーネルとハードウェア機能によって、デプロイできる場所が制限されています。このチームは、システム セキュリティと安定性に重点を置きながら、適切な機能のバックポートを行ってきました。これは継続的な取り組みの分野です。
現在サポートされている
現在サポートされているデバイスの一覧については、Linux をサポートしている ChromeOS システムをご覧ください。
ハードウェア要件
現在、ChromeOS コンテナで Linux を実行するために必要な RAM、ストレージ、CPU 速度の最小要件はありませんが、それぞれが多いほどシステムのパフォーマンスは向上します。
ただし、ハードウェア仮想化をサポートする CPU が必要になります。x86 プラットフォームでは、これには多くの名前があります。Intel では、これを VT-x と VMX と呼びます。AMD では、これを AMD-V と SVM と呼んでいます。
BayTrail システム
Intel の BayTrail を使用する Chromebook には VT-x は含まれていません。この CPU には通常 VMX が含まれていますが、Chromebook のバリエーションには含まれていないため、残念ながらサポートされることはありません。
ボードがサポートされているかどうかは、公開されているデバイス リストの Platform 列で BayTrail を検索して確認できます。
古いカーネル
Linux 3.14 以前をサポートする予定はありません。これらには、広範囲にわたる、多くの場合侵入的な新機能のバックポートが必要です。次に例を示します。
ボードがサポートされているかどうかは、公開されているデバイス リストの Kernel 列で 3.14 より小さいバージョン番号を検索することで確認できます。
32 ビット ARM CPU
32 ビット ARM CPU で仮想マシンを動作させることは難しく、標準外であり、ファームウェアとの連携が必要です。残念ながら、ChromeOS ファームウェアでは拡張機能が構成されない傾向があります。そのため、これらのシステムはサポートされていません。
ボードがサポートされているかどうかは、公開されているデバイス リストの Kernel ABI 列で arm を検索して確認できます。