第4章 PolicyKit

PolicyKit ユーティリティーは、サービスを権限のないプロジェクト (サブジェクト とも呼ぶ) に提供する際に権限のあるプログラム (メカニズム とも呼ぶ) が使用する承認 API を提供するフレームワークです。以下は、PolicyKit またはそのシステム名である polkit になされた変更の詳細です。

4.1. ポリシー設定

新機能に関連して、認証ルールは JavaScript .rules ファイルで定義されるようになりました。これは、同じファイルがルールと管理者ステータスの両方を定義するために使用されることを意味します。これまでは、この情報は *.pkla および *.conf の 2 つの異なるファイルに保存され、これらのファイルは追加のローカル認証を定義するためにキー/値のペアを使用していました。
これらの新たな .rules ファイルは以下の 2 つの場所に保存されます。ローカルのカスタマイズ用の polkit ルールは /etc/polkit-1/rules.d/ ディレクトリーに保存され、サードパーティーのパッケージは /usr/share/polkit-1/rules.d/ に保存されます。
既存の .conf および .pkla 設定ファイルは .rules ファイルと一緒に保持され、存在してきました。polkit は互換性を考慮に入れて Red Hat Enterprise Linux 7 用にアップグレードされました。
ルールにおける優先順位のロジックが変更されました。polkitd/etc/polkit-1/rules.d および /usr/share/polkit-1/rules.d ディレクトリーから .rules ファイルを辞書式順序で読み取ります。2 つのファイルに同一の名前が付けられる場合、/etc のファイルが /usr のファイルの前に処理されます。さらに、既存ルールは /etc/polkit-1/rules.d/49-polkit-pkla-compat.rules ファイルによって適用されます。したがって、それらのルールは 49-polkit-pkla-compat の前に来る名前を持つ /usr または /etc のいずれかの .rules ファイルによって辞書式順序で上書きされる可能性があります。古いルールが上書きされないようにする最も簡単な方法は、その他すべての .rules ファイルの名前を 49 よりも大きな数字で始めることです。
以下は、.rules ファイルの例です。これは、システムデバイスに storage グループ用のファイルシステムをマウントすることを許可するルールを作成します。このルールは /etc/polkit-1/rules.d/10-enable-mount.rules ファイルに保存されます。

例4.1 システムデバイスへのファイルシステムのマウントの許可

polkit.addRule(function(action, subject) {
    if (action.id == "org.freedesktop.udisks2.filesystem-mount-system" &&
        subject.isInGroup("storage")) {
        return polkit.Result.YES;
    }
});

詳細は、以下を参照してください。

  • polkit(8) – JavaScript ルールおよび優先順位ルールの説明が記載されている man ページです。
  • pkla-admin-identities(8) および pkla-check-authorization(8) – .conf および .pkla ファイル形式について個別に記載している man ページです。