「設定 - PolKit」の版間の差分

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動
14行目: 14行目:
<br>
<br>
PolKitのビルドに必要なライブラリをインストールする。<br>
PolKitのビルドに必要なライブラリをインストールする。<br>
  sudo zypper install dbus-1-devel libexpat-devel systemd-devel glib2-devel gobject-introspection-devel mozjs78-devel
  sudo zypper install dbus-1-devel libexpat-devel systemd-devel glib2-devel gtk3-devel gobject-introspection-devel mozjs78-devel pam-devel duktape-devel
<br>
<br>
[https://www.freedesktop.org/software/polkit/releases/ PolKitの公式Webサイト]または[https://gitlab.freedesktop.org/polkit/polkit/-/tags GitLab]にアクセスして、ソースコードをダウンロードする。<br>
[https://www.freedesktop.org/software/polkit/releases/ PolKitの公式Webサイト]または[https://gitlab.freedesktop.org/polkit/polkit/-/tags GitLab]にアクセスして、ソースコードをダウンロードする。<br>

2022年12月6日 (火) 04:55時点における版

概要

PolKit(以前は、PolicyKitとして知られていた)は、非特権ユーザセッションと特権システムコンテキストの間のネゴシエータとして機能するアプリケーションフレームワークである。

PolKitは、ユーザ、グループ、名前により特定のアクションを制限する機能を持つ。
ユーザセッションのプロセスが、システムコンテキストでアクションを実行するごとに、PolKitはクエリされる。 所謂、ポリシーで指定された設定に基づいて、"yes"、"no"、"needs authentication"である可能性がある。

sudoのような古典的な権限承認プログラムとは異なり、PolKitはセッション全体に対してroot権限を与えるのではなく、各アクションに対してのみ権限を与える。


PolKitのインストール

多くのLinuxディストリビューションには、初期状態でPolKitがインストールされている。
もし、別途インストールする必要がある場合、ソースコードからPolKitをインストールする。

PolKitのビルドに必要なライブラリをインストールする。

sudo zypper install dbus-1-devel libexpat-devel systemd-devel glib2-devel gtk3-devel gobject-introspection-devel mozjs78-devel pam-devel duktape-devel


PolKitの公式WebサイトまたはGitLabにアクセスして、ソースコードをダウンロードする。
ダウンロードしたファイルを解凍する。

tar xf polkit-<バージョン>.tar.gz
cd polkit-<バージョン>


また、git cloneコマンドを実行して、PolKitのソースコードをダウンロードする。

git clone https://gitlab.freedesktop.org/polkit/polkit.git
cd polkit


PolKitをビルドおよびインストールする。
設定可能なオプションの一覧は、meson configureコマンドで取得することができる。

meson setup build --prefix=<PolKitのインストールディレクトリ> -Dexample=true
meson compile -C build
meson install -C build



利用可能な認証エージェント

ユーザがセッションを開始する時(CUI環境またはGUI環境)、各セッションは権限と認証エージェントで構成される。
権限はシステムメッセージバス上のサービスとして実装されており、一方、認証エージェントはセッションを開始したユーザを認証するために使用される。
現在のユーザは、例えば、パスフレーズを使用して、その信頼性を証明する必要がある。

各デスクトップ環境は、独自の認証エージェントを持っており、通常、どのデスクトップ環境を選択しても自動的に起動する。


PolKitの構造

PolKitの構成は、アクションと認可ルールに依存する。

  • アクション (拡張子 : .policy)
    XMLファイルとして記述されており、/usr/share/polkit-1/actionsディレクトリに存在する。
    各ファイルは1つまたは複数のアクションを定義して、各アクションには説明とデフォルトのパーミッションが含まれている。
    システム管理者は、独自のルールを記述することができるが、システム既存のPolKitのファイルは編集してはならない。

  • 認証ルール (拡張子 : .rules)
    JavaScriptファイルとして記述されており、以下に示す2つのディレクトリに配置される。
    各ルールファイルは、アクションファイルで指定されたアクションを参照する。
    ルールは、ユーザのサブセットに対してどのような制限を許可するかを決定する。
    例えば、ルールファイルで制限的なパーミッションを無効にして、一部のユーザにのみ許可を与えること等を行うことができる。
    • /usr/share/polkit-1/rules.dディレクトリ
      主にパッケージ管理システムからインストールするサードパーティのソフトウェアに使用される。
    • /etc/polkit-1/rules.dディレクトリ
      ユーザの独自の設定に使用される。



利用可能なコマンド

PolKitには、特定のタスクのためのコマンドが存在する。

  • pkactionコマンド
    定義されたアクションの詳細を取得する。
    例. org.freedesktop.login1.rebootに対して、必要な認可を表示する。
    pkaction -v --action-id=org.freedesktop.login1.reboot

    また、pkactionコマンドを実行することにより、定義された全てのアクションを表示することができる。

  • pkcheckコマンド
    processコマンドまたは--system-bus-nameオプションで指定されたプロセスが認可されているかどうかを確認する。

  • pkexecコマンド
    認可されたユーザが他のユーザとして特定のプログラムを実行することを許可する。

  • pkttyagentコマンド
    テキスト形式の認証エージェントを起動する。
    この認証エージェントは、各デスクトップ環境に独自の認証エージェントが存在しない場合に使用される。



PolKitが使用されているソフトウェアの例

  • PulseAudio
    PulseAudioデーモンのスケジューリング優先順位の設定
  • CUPS
    プリンタの追加、削除、編集、有効化、無効化
  • バックアップマネージャ
    スケジュールの変更
  • GNOME
    GConfによるシステムおよび必須値の変更
    システム時間の変更
  • libvirt
    ローカルな仮想化システムの管理・監視
  • NetworkManager
    接続の適用と変更
  • PolKit
    他ユーザーの読み取りと権限変更
    デフォルトの変更
  • PackageKit
    パッケージの更新と削除
    リポジトリの変更と更新
    ローカルファイルのインストール
    ロールバック
    リポジトリキーのインポート
    EULAを受け入れる
    ネットワークプロキシの設定
  • System
    Wake on LAN
    固定デバイス、ホットプラグ可能なデバイス、暗号化されたデバイスのマウント/アンマウント
    リムーバブルメディアの取り出し、復号化
    WLANの有効化/無効化
    Bluetoothの有効化/無効化
    デバイスアクセス
    システムの停止、サスペンド、ハイバネート、および再起動
    ドッキングステーションのドッキング解除
    パワーマネージメント設定の変更
  • YaST
    製品の登録
    システムの時刻と言語を変更する



権限の種類

PolKitが有効なプロセスが特権的な操作を実行するごとに、PolKitはこのプロセスにその権限があるかどうかを尋ねる。

PolKitは、このプロセスに対して定義されたポリシーに従って、"yes"、"no"、その他4種類の値のいずれかを選択する。
デフォルトでは、ポリシーは暗黙の特権を含んでおり、自動的に全てのユーザに適用される。
また、特定のユーザに適用される明示的な特権を指定することも可能である。

暗黙の特権

暗黙の特権は、アクティブなセッションと非アクティブなセッションのいずれに対しても定義することができる。

アクティブなセッションとは、現在作業しているセッションのことである。 例えば、他のコンソールに切り替えた場合は、非アクティブになる。

暗黙の特権をnoに設定する場合、いずれのユーザも認証されない。
yesに設定する場合、全てのユーザが認証される。
しかし、一般的には、認証を要求することが有用である。

ユーザは、rootとして認証するか一般ユーザとして認証するか、いずれかの方法で認証することができる。 どちらの認証方法も、4種類の値が存在する。


PolKitの設定

ユーザの独自の特権 (カスタム特権)

設定ファイルを作成または修正して特権を調整することにより、例えば、特定のチームのPC等の異なるPCに同じポリシーセットを配備することができる。
このように、暗黙的および明示的な特権を変更することができる。

  • /etc/polkit-default-privs.localファイル
    ユーザの独自の特権(カスタム特権)を行う場合に使用する。(優先順位は最優先)

    ユーザの独自の特権を定義または変更する場合、以下に示すように記述する。
    <権限を付与するID> <any session>:<inactive session>:<active session>


ユーザの独自の特権(カスタム特権)は、/etc/polkit-default-privs.localファイルで定義する。
このファイルで定義された特権は、他の設定ファイルで定義されたものよりも優先される。

定義または変更を有効にするためには、/sbin/set_polkit_default_privsコマンドを実行する必要がある。
このコマンドは、現在、設定されている/etc/polkit-default-privsファイルに従ってPolKitのアクションを設定する。

sudo set_polkit_default_privs


全てのPolicyKitの特権を元に戻す。

sudo rm -r "/var/lib/polkit/*"
sudo set_polkit_default_privs


ルールファイル

  • /etc/polkit.d/rules.d/<ファイル名>.rulesファイル (優先順位は最優先)
    ユーザが独自の特権を追加する場合、または、パッケージ管理システムからインストールしたソフトウェアが使用する。
    各ルールファイルは、アクションファイルで指定されたアクションを参照し、ユーザのサブセットに対してどのような制限を許可するかを決定する。
    例えば、ルールファイルは制限的なパーミッションを無効にして、一部のユーザにのみ許可する等、設定することができる。

    addRuleメソッドは、アクションとサブジェクトの認可チェックが実行されるたびに呼び出される関数を追加するために使用される。
    メソッドは、追加された順番に、いずれかの関数が値を返すまで呼び出される。
    したがって、他のルールよりも先に処理される認可ルールを追加する場合は、、他のルールファイルよりも前にソートする名前(例えば、00-early-checks.rulesファイル)を付ける。

    以下の例では、GParted/usr/share/polkit-1/rules.d/<ファイル名>.rulesファイルのルールファイル(拡張子 : .rules)を作成して、adminグループのユーザは認証なしでGPartedを実行できるようにしている。
    polkit.addRule(function(action, subject) {
    if (action.id == "org.gnome.gparted" &&
    subject.isInGroup("admin")) {
    return polkit.Result.YES;
    }
    });

  • /usr/share/polkit-1/rules.d/<ファイル名>.rulesファイル
    パッケージ管理システムからインストールしたソフトウェアが使用する。


アクションルール

利用可能なアクションは、システムにインストールされている追加パッケージにより異なる。

独自のアクションルールを追加するには、以下の例に示すような構造を持つ.policyファイルを作成して、id属性に適切な値を追加して、特権を定義する。

以下の例では、GParted(GNOMEパーティションエディタ)のアクションルールを記載している。

 # /usr/share/polkit-1/actions/org.opensuse.policykit.gparted.policyファイル
 
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE policyconfig PUBLIC
  "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
  "http://www.freedesktop.org/standards/PolicyKit/1.0/policyconfig.dtd">
 <policyconfig>  ...(1)
 
   <action id="org-opensuse-policykit-gparted">  ...(2)
     <message>Authentication is required to run the GParted Partition Editor</message>
     <icon_name>gparted</icon_name>
     <defaults>  ...(3)
       <allow_any>auth_admin</allow_any>
       <allow_inactive>auth_admin</allow_inactive>
       <allow_active>auth_admin</allow_active>
     </defaults>
     <annotate    ...(4)
       key="org.freedesktop.policykit.exec.path">/usr/sbin/gparted</annotate>
     <annotate 4  ...(5)
       key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
   </action>
 
 </policyconfig>


  1. policyconfigエレメント
    ポリシーファイルのルート要素

  2. actionエレメント
    1つの単一のアクションを含む

  3. defaultsエレメント
    yesは、認証なしで該当ソフトウェアを実行することが許可されることを意味する。
    noは、該当のソフトウェアを実行する権限が無いことを意味する。
    auth_selfは、ユーザは特権が要求されるたびに自分のパスワードで認証する必要があることを意味する。
    auth_self_keepは、auth_selfと同様であるが、認証が一定時間続くことを意味する。
    auth_self_keep_sessionは、ユーザはセッションごとに1度だけ自身のパスワードで認証する必要があり、特権はセッション全体に対して付与される。
    auth_self_keep_alwaysは、ユーザが自身のパスワードで認証する必要があるのは1度だけで、現在と将来のセッションに対して特権が付与される。
    auth_adminは、管理者として認証が必要であることを意味する。
    auth_admin_keepは、auth_adminと同様であるが、認証が一定時間続くことを意味する。
    auth_admin_keep_alwaysは、管理者として認証が必要であるのは1度だけで、現在と将来のセッションに対して特権が付与される。

    • allow_inactiveエレメント
      SSHやVNCのようなリモートセッションでログインした場合の特権
    • allow_activeエレメント
      TTYやXディスプレイでマシンに直接ログインした場合の特権
    • allow_anyエレメント
      上記の両方で使用する特権

  4. annotateエレメント
    PolKitがどのようにアクションを実行するかに関する特定の情報が含まれる。
    実行ファイルへの絶対パスを記述する。

  5. annotate 4エレメント
    GUIがXディスプレイを開くことを許可するかどうかを記述する。



PolKitの設定例 ==

PolicyKitにカスタムアクションを追加することにより、root権限でGUIソフトウェアを実行することができる。

例えば、pkexecコマンドを使用してgeditを実行する場合、
/usr/share/polkit-1/actions/org.freedesktop.policykit.gedit.policyファイルを作成する必要がある。

 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE policyconfig PUBLIC "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
 "http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
 <policyconfig>
    <action id="org.freedesktop.policykit.pkexec.gedit">
    <description>Run gedit program</description>
    <message>Authentication is required to run the gedit</message>
    <icon_name>accessories-text-editor</icon_name>
    <defaults>
       <allow_any>auth_admin</allow_any>
       <allow_inactive>auth_admin</allow_inactive>
       <allow_active>auth_admin</allow_active>
    </defaults>
    <annotate key="org.freedesktop.policykit.exec.path">/usr/bin/gedit</annotate>
    <annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
    </action>
 </policyconfig>


詳細を知りたい場合は、以下に示すURLにアクセスして、リファレンスマニュアルを参照すること。
http://www.freedesktop.org/software/polkit/docs/0.105/pkexec.1.html