kledgeb UbuntuやLinuxの最新情報を紹介

Ubuntu 23.10 その43 - 非特権プロセスによるユーザー名前空間の利用制限とAppArmor

非特権プロセスによるユーザー名前空間の利用制限

「Ubuntu 23.10」で非特権プロセスによるユーザー名前空間の利用に制限が加わります。


  • Restricted unprivileged user namespaces are coming to Ubuntu 23.10

セキュリティーリスクを軽減するため

非特権プロセスによるユーザー名前空間の利用に制限が加えられるのは、ユーザー名前空間の利用におけるセキュリティーリスクを軽減するためです。

非特権プロセスによるユーザー名前空間

非特権プロセスによるユーザー名前空間は異なるユーザーID(setuid)とグループID(setguid)を設定できるようにするカーネルの機能です。
この機能を活用することでアプリはより安全なサンドボックス環境を構築できます。

  • user_namespaces

しかしこの機能は特権(root)を持つプロセスのみに利用を制限されるカーネルのインターフェースを非特権プロセスに公開することになります。
必要以上に非特権プロセスにカーネルインターフェースを公開すると、新たなセキュリティーリスクが生まれます。

つまりそのカーネルインターフェースを対象に攻撃を仕掛ける悪意あるソフトウェアの標的になりかねませんし、また実際にその脆弱性が報告されています。

ユーザー名前空間を無効化する方法もある

このセキュリティーリスクを軽減するためにユーザー名前空間を無効化する方法もあります。
しかしこの方法はユーザー名前空間を利用しているアプリが動作しなくなる可能性もあります。

一般的に悪意あるソフトウェアは特定のアプリを標的にしており、システム全体でユーザー名前空間を無効化しなくても、そのアプリでユーザー名前空間を無効化すれば、このセキュリティーリスクを軽減できるでしょう。

Ubuntuの対応方針

というわけで「Ubuntu 23.10」でユーザー名前空間の利用に制限が導入されます。

  • [spec] Unprivileged user namespace restrictions via AppArmor in Ubuntu 23.10

この利用制限は「AppArmor」を利用して導入されます。

AppArmor

「AppArmor」は「Ubuntu」で導入されている「Linux Security Modules(LSM)」です。

  • AppArmor

「AppArmor」の役割はプロセスの振る舞い(出来ること)に制限をかけることです。
ちなみに同じ役割を持つ「LSM」に「SELinux」があります。

選択的無効化

「AppArmor」により選択的にユーザー名前空間の利用を許可もしくは禁止できます。
この設定の定義はAppArmorプロファイルで行い、アプリごとAppArmorプロファイルを作成します。

AppArmorプロファイルで明示的に「Confined」モードかつ「userns」ルールが指定されているアプリのみ、ユーザー名前空間を利用できます。

言い換えればAppArmorプロファイルを作成しない限り、そのアプリはデフォルトでユーザー名前空間を作成できなくなります。

AppArmorプロファイルの作成は大変

AppArmorプロファイルにはアプリに許可すべき権限を指定するのですが、それぞれのアプリごとに完璧なAppArmorプロファイルを作成するのは現実的ではありません。
特にカジュアルユーザーには非常に難しい作業になるでしょう。

Unconfinedプロファイルモード

そこで「AppArmor」に新しい「Unconfined」プロファイルモードが導入されました。
このモードではアプリは「Unconfined」のままになりますが、ユーザー名前空間の利用を許可する「userns」ルールが導入され、このルールを利用してユーザー名前空間を許可できるようになりました。

例えば「Google Chrome」にユーザー名前空間の利用を許可するAppArmorプロファイルを作成する場合、「/etc/apparmor.d/opt.google.chrome.chrome」ファイルに以下の名用を記述します。

abi <abi/4.0>,

include <tunables/global>

/opt/google/chrome/chrome flags=(unconfined) {
  userns,

  # Site-specific additions and overrides. See local/README for details.
  include if exists <local/opt.google.chrome.chrome>
}

補足

リンク先では「default_allow」と紹介されていますが、リリースノートや実際に「Ubuntu 23.10」にインストールされるAppArmorプロファイルを見ると「unconfined」になっているため、ここでも「unconfined」で紹介しています。

そうは言ってもカジュアルユーザーが困る

ユーザーから見た場合今回の制限は、「Firefox」や「Google Chrome」などサンドボックスを利用するソフトウェアも影響を受けます。

そこで「Ubuntu」開発チームは、「Ubuntu」が提供するアプリの内、本件に影響を受けるアプリをリストアップして、これらのアプリに対応したAppArmorプロファイルを作成しています。

サードパーティー製のアプリもカバーしたい

加えて「apparmor」のバイナリーパッケージ(ユーザーがインストールするパッケージ)にAppArmorプロファイルを同梱する計画も立てられています。
これは「apparmor-profiles」パッケージやアプリのパッケージの中身を比較及び確認しながら、影響を受けるアプリのAppArmorプロファイルを同梱する予定です。

これにより例えば「Ubuntu」が提供していない「Google Chrome」でも、「/opt/google
/chrome/chrome」に対応したAppArmorプロファイルを提供できるようになります。

それでも漏れるアプリもある

世の中には多数のアプリがあります。

例え「Ubuntu」側が特定のアプリに対応したAppArmorプロファイルを提供したとしても、必ずそこから漏れてしまうアプリもあります。
その場合そのアプリは前述したとおりユーザー名前空間の利用を拒否されます。

またAppArmorプロファイルはアプリのバイナリーを完全なパスも含め認識するため、もし仮に「Google Chrome」が「/opt/google/chrome/chrome」以外の場所にインストールされた場合、「Ubuntu」が提供するAppArmorプロファイルは機能しなくなります。

最善の方法は

本件に関する最善の方法は、アプリの開発者自身がAppArmorプロファイルを提供することです。

制限の導入と開始時期

制限自体の導入は「Ubuntu 23.10」で行われますが、デフォルトでは無効になっており、ユーザーが任意に有効化できます。
つまり従来どおり利用に制限が加えられておらず、アプリはユーザー名前空間を利用できます。

しかし多くのユーザーからこの制限によるフィードバックを得るため、「Ubuntu 23.10」リリースした週数間後にアップデートを通じてユーザー名前空間の利用制限がデフォルトで有効になります。

システム全体で制限を制御するには

システム全体でユーザー名前空間の利用制限を有効にするには、以下のコマンドを実行します。

sudo sysctl -w kernel.apparmor_restrict_unprivileged_unconfined=1
sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=1

システム全体でユーザー名前空間の利用制限を無効にするには、以下のコマンドを実行します。

sudo sysctl -w kernel.apparmor_restrict_unprivileged_unconfined=0
sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0

ただしこの方法を利用して「Ubuntu」を日常的に運用することは推奨されません。

今回の制限とLinux kernel 6.5の関係について

今回の制限は「AppArmor」で制御される制限であり、「Ubuntu 23.10」で採用される「Linux kernel 6.5」で直接的な制御を行う制限ではありません。

今後リリース予定の「Ubuntu 22.04.4 LTS」で「Ubuntu 23.10」の「Linux kernel 6.5」が導入されますが、「Ubuntu 22.04.4 LTS」で本件による制限を受けることはありません。

Ubuntu
スポンサー
コメント
コメントポリシー
コメントをする前に UbuntuのCode of Conduct(CoC/行動規範) を確認し、CoCに沿ったコメントをお願いします。
コメントの使い方は、コメントの使い方を参照してください。
同一カテゴリーの記事
SNS
人気の記事
  • Linux その450 - Canonical LXD や MicroCloud にクライアントなりすましの脆弱性・アップデートを
    Canonical LXD や MicroCloud に重大な脆弱性 2026年10月28日、Canonical LXD や MicroCloud に重大な脆弱性がみつかりました。
  • Ubuntu 26.04 その82 - Linux kernel の脆弱性 CVE-2026-98432 の対応状況
    CVE-2026-98432 の対応状況 2026年11月2日、Linux kernel の脆弱性である CVE-2026-98432 の対応状況がアナウンスされました。
  • Linux Mint その294 - Linux Mint 27 の開発とリリース方針の変更・アラーム管理アプリの開発
    Linux Mint 月刊ニュース Linux Mint 開発チームは Linux Mint 月刊ニュースにて、Linux Mint の開発状況や取り組みを紹介しています。
  • Ubuntu 26.04 その76 - CVE-2026-92392 含む curl の脆弱性22件修正・アップデートを
    curl の脆弱性22件修正 CVE-2026-92392 含む22件の curl の脆弱性に対応したセキュリティーアップデートがリリースされました。
  • Ubuntu 26.10 その38 - Ubuntu 26.10 がリリースされました・ディスクイメージのダウンロード
    Ubuntu 26.10 リリース 2026年10月15日、Ubuntu 26.10 がリリースされました。
  • Ubuntu 26.04 その78 - eMudhra 認証局の秘密鍵の侵害・アップデートを
    eMudhra 認証局の秘密鍵の侵害 2026年10月20日、eMudhra 認証局(eMudhra CA)の秘密鍵の侵害が発覚しました。
  • Ubuntu 26.04 その79 - CVE-2026-111497 に対応した Brotli のリリース・アップデートを
    Brotli のセキュリティーアップデート 2026年10月26日、CVE-2026-111497 に対応した Brotli がリリースされました。
  • Ubuntu 26.10 その39 - Ubuntu 26.10 の新機能と変更点・既知の問題
    Ubuntu 26.10 の新機能と変更点・既知の問題 リリースノートから、Ubuntu 26.10 の新機能と変更点を紹介します。
  • Ubuntu 26.04 その77 - PHP に php2shell(CVE-2026-109618/CVE-2026-109619)の脆弱性・アップデートを
    PHP に php2shell の脆弱性 PHP に php2shell と呼ばれる致命的な脆弱性が見つかりました。
  • Ubuntu 26.04 その80 - Ubuntu 26.04.2 LTS のリリーススケジュール
    Ubuntu 26.04.2 LTSのリリーススケジュール Ubuntu 26.04.2 LTS のリリーススケジュールを紹介します。
記事のピックアップ
オプション