MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
設定 - PolKitのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
設定 - PolKit
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == PolKit(以前は、PolicyKitとして知られていた)は、非特権ユーザセッションと特権システムコンテキストの間のネゴシエータとして機能するアプリケーションフレームワークである。<br> <br> PolKitは、ユーザ、グループ、名前により特定のアクションを制限する機能を持つ。<br> ユーザセッションのプロセスが、システムコンテキストでアクションを実行するごとに、PolKitはクエリされる。 所謂、ポリシーで指定された設定に基づいて、"yes"、"no"、"needs authentication"である可能性がある。<br> <br> <code>sudo</code>のような古典的な権限承認プログラムとは異なり、PolKitはセッション全体に対してroot権限を与えるのではなく、各アクションに対してのみ権限を与える。<br> <br><br> == PolKitのインストール == 多くのLinuxディストリビューションには、初期状態でPolKitがインストールされている。<br> もし、別途インストールする必要がある場合、ソースコードからPolKitをインストールする。<br> <br> PolKitのビルドに必要なライブラリをインストールする。<br> sudo zypper install dbus-1-devel libexpat-devel systemd-devel glib2-devel gtk3-devel gobject-introspection-devel mozjs78-devel pam-devel duktape-devel <br> [https://www.freedesktop.org/software/polkit/releases/ PolKitの公式Webサイト]または[https://gitlab.freedesktop.org/polkit/polkit/-/tags GitLab]にアクセスして、ソースコードをダウンロードする。<br> ダウンロードしたファイルを解凍する。<br> tar xf polkit-<バージョン>.tar.gz cd polkit-<バージョン> <br> また、<code>git clone</code>コマンドを実行して、PolKitのソースコードをダウンロードする。<br> git clone https://gitlab.freedesktop.org/polkit/polkit.git cd polkit <br> PolKitをビルドおよびインストールする。<br> 設定可能なオプションの一覧は、<code>meson configure</code>コマンドで取得することができる。<br> meson setup build --prefix=<PolKitのインストールディレクトリ> -Dos_type=suse -Dexamples=true -Dman=true -Dgtk_doc=true meson compile -C build meson install -C build <br><br> == 利用可能な認証エージェント == ユーザがセッションを開始する時(CUI環境またはGUI環境)、各セッションは権限と認証エージェントで構成される。<br> 権限はシステムメッセージバス上のサービスとして実装されており、一方、認証エージェントはセッションを開始したユーザを認証するために使用される。<br> 現在のユーザは、例えば、パスフレーズを使用して、その信頼性を証明する必要がある。<br> <br> 各デスクトップ環境は、独自の認証エージェントを持っており、通常、どのデスクトップ環境を選択しても自動的に起動する。<br> <br><br> == PolKitの構成 == PolKitの構成は、アクションと認可ルールに依存する。<br> <br> * アクション : Action (拡張子 : .policy) *: XMLファイルとして記述されており、/usr/share/polkit-1/actionsディレクトリに存在する。 *: 各ファイルに1つまたは複数のアクションを定義されており、各アクションには説明とデフォルトのパーミッションが含まれている。 *: システム管理者は、独自のルールを記述することができるが、システム既存のPolKitのファイルは編集してはならない。 *: <br> * 認証ルール : Authorization rules (拡張子 : .rules) *: JavaScriptファイルとして記述されており、各ルールファイルは、アクションファイルで定義されたアクションを参照する。 *: ルールは、ユーザのサブセットに対してどのような制限を許可するかを決定する。 *: <br> *: 例えば、ルールファイルで制限的なパーミッションを無効にして、一部のユーザまたはグループにのみ許可を与えること等を行うことができる。 *: <br> *: 認証ルールファイルは、以下に示す2つのディレクトリのいずれかに配置される。 *:* /etc/polkit-1/rules.dディレクトリ *:*: ユーザまたはシステム管理者の独自の設定に使用される。 *:*: <u>このディレクトリに、ユーザまたはシステム管理者がファイルを作成することを推奨する。</u> *:*: <br> *:* /usr/share/polkit-1/rules.dディレクトリ *:*: 主に、システムやパッケージ管理システムからインストールするソフトウェアに使用される。 *:*: このディレクトリに、ユーザまたはシステム管理者がファイルを作成することは非推奨である。 <br> PolKitは、特権ユーザの権利を抑制しようとするものではなく。非特権ユーザの特権サービスへのアクセスを拡張するために使用されるべきである。<br> セキュリティの観点からは、<code>sudoers</code>を使用することを推奨する。<br> <br><br> == 利用可能なコマンド == PolKitには、特定のタスクのためのコマンドが存在する。<br> <br> * pkactionコマンド *: 定義されたアクションの詳細を取得する。 *: 例. org.freedesktop.login1.rebootに対して、必要な認可を表示する。 *: <code>pkaction -v --action-id=org.freedesktop.login1.reboot</code> *: <br> *: また、<code>pkaction</code>コマンドを実行することにより、定義された全てのアクションを表示することができる。<br> *: <br> * pkcheckコマンド *: processコマンドまたは<code>--system-bus-name</code>オプションで指定されたプロセスが認可されているかどうかを確認する。 *: <br> * pkexecコマンド *: 認可されたユーザが他のユーザとして特定のプログラムを実行することを許可する。 *: <br> * pkttyagentコマンド *: テキスト形式の認証エージェントを起動する。 *: この認証エージェントは、各デスクトップ環境に独自の認証エージェントが存在しない場合に使用される。 <br><br> == PolKitが使用されているソフトウェアの例 == * PulseAudio *: PulseAudioデーモンのスケジューリング優先順位の設定 * CUPS *: プリンタの追加、削除、編集、有効化、無効化 * バックアップマネージャ *: スケジュールの変更 * GNOME *: GConfによるシステムおよび必須値の変更 *: システム時間の変更 * libvirt *: ローカルな仮想化システムの管理・監視 * NetworkManager *: 接続の適用と変更 * PolKit *: 他ユーザーの読み取りと権限変更 *: デフォルトの変更 * PackageKit *: パッケージの更新と削除 *: リポジトリの変更と更新 *: ローカルファイルのインストール *: ロールバック *: リポジトリキーのインポート *: EULAを受け入れる *: ネットワークプロキシの設定 * System *: Wake on LAN *: 固定デバイス、ホットプラグ可能なデバイス、暗号化されたデバイスのマウント/アンマウント *: リムーバブルメディアの取り出し、復号化 *: WLANの有効化/無効化 *: Bluetoothの有効化/無効化 *: デバイスアクセス *: システムの停止、サスペンド、ハイバネート、および再起動 *: ドッキングステーションのドッキング解除 *: パワーマネージメント設定の変更 * YaST *: 製品の登録 *: システムの時刻と言語を変更する <br><br> == 権限の種類 == PolKitが有効なプロセスが特権的な操作を実行するごとに、PolKitはこのプロセスにその権限があるかどうかを尋ねる。<br> <br> PolKitは、このプロセスに対して定義されたポリシーに従って、"yes"、"no"、その他4種類の値のいずれかを選択する。 <br> デフォルトでは、ポリシーは暗黙の特権を含んでおり、自動的に全てのユーザに適用される。<br> また、特定のユーザに適用される明示的な特権を指定することも可能である。<br> <br> ==== 暗黙の特権 ==== 暗黙の特権は、アクティブなセッションと非アクティブなセッションのいずれに対しても定義することができる。<br> <br> アクティブなセッションとは、現在作業しているセッションのことである。 例えば、他のコンソールに切り替えた場合は、非アクティブになる。<br> <br> 暗黙の特権を<code>no</code>に設定する場合、いずれのユーザも認証されない。<br> <code>yes</code>に設定する場合、全てのユーザが認証される。<br> しかし、一般的には、認証を要求することが有用である。<br> <br> ユーザは、rootとして認証するか一般ユーザとして認証するか、いずれかの方法で認証することができる。 どちらの認証方法も、4種類の値が存在する。<br> <br><br> == PolKitの設定 == ==== ユーザの独自の特権 (カスタム特権) ==== 設定ファイルを作成または修正して特権を調整することにより、例えば、特定のチームのPC等の異なるPCに同じポリシーセットを配備することができる。<br> このように、暗黙的および明示的な特権を変更することができる。<br> <br> * /etc/polkit-default-privs.localファイル *: ユーザの独自の特権(カスタム特権)を行う場合に使用する。(優先順位は最優先) *: <br> *: ユーザの独自の特権を定義または変更する場合、以下に示すように記述する。<br> *: <code><権限を付与するID> <any session>:<inactive session>:<active session></code> <br> ユーザの独自の特権(カスタム特権)は、/etc/polkit-default-privs.localファイルで定義する。<br> このファイルで定義された特権は、他の設定ファイルで定義されたものよりも優先される。<br> <br> 定義または変更を有効にするためには、<code>/sbin/set_polkit_default_privs</code>コマンドを実行する必要がある。<br> このコマンドは、現在、設定されている/etc/polkit-default-privsファイルに従ってPolKitのアクションを設定する。<br> sudo set_polkit_default_privs <br> 全てのPolicyKitの特権を元に戻す。<br> sudo rm -r "/var/lib/polkit/*" sudo set_polkit_default_privs <br> ==== ルールファイル ==== * /etc/polkit.d/rules.d/<ファイル名>.rulesファイル (優先順位は最優先) *: ユーザが独自の特権を追加する場合、または、パッケージ管理システムからインストールしたソフトウェアが使用する。 *: 各ルールファイルは、アクションファイルで指定されたアクションを参照し、ユーザのサブセットに対してどのような制限を許可するかを決定する。 *: 例えば、ルールファイルは制限的なパーミッションを無効にして、一部のユーザにのみ許可する等、設定することができる。 *: <br> *: <code>addRule</code>メソッドは、アクションとサブジェクトの認可チェックが実行されるたびに呼び出される関数を追加するために使用される。 *: メソッドは、追加された順番に、いずれかの関数が値を返すまで呼び出される。 *: <u>したがって、他のルールよりも先に処理される認可ルールを追加する場合は、、他のルールファイルよりも前にソートする名前(例えば、00-early-checks.rulesファイル)を付ける。</u> *: <br> *: 以下の例では、GParted/usr/share/polkit-1/rules.d/<ファイル名>.rulesファイルのルールファイル(拡張子 : .rules)を作成して、adminグループのユーザは認証なしでGPartedを実行できるようにしている。 *: <code>polkit.addRule(function(action, subject) {</code> *: <code> if (action.id == "org.gnome.gparted" &&</code> *: <code> subject.isInGroup("admin")) {</code> *: <code> return polkit.Result.YES;</code> *: <code> }</code> *: <code>});</code> *: <br> * /usr/share/polkit-1/rules.d/<ファイル名>.rulesファイル *: パッケージ管理システムからインストールしたソフトウェアが使用する。 <br> ==== アクションルール ==== 利用可能なアクションは、システムにインストールされている追加パッケージにより異なる。<br> <br> 独自のアクションルールを追加するには、以下の例に示すような構造を持つ.policyファイルを作成して、<code>id</code>属性に適切な値を追加して、特権を定義する。<br> <br> 以下の例では、GParted(GNOMEパーティションエディタ)のアクションルールを記載している。<br> <syntaxhighlight lang="xml"> # /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> </syntaxhighlight> <br> # policyconfigエレメント #: ポリシーファイルのルート要素 #:<br> # actionエレメント #: 1つの単一のアクションを含む #: <br> # defaultsエレメント #: 値<code>yes</code>は、認証なしで該当ソフトウェアを実行することが許可されることを意味する。 #: 値<code>no</code>は、該当のソフトウェアを実行する権限が無いことを意味する。 #: 値<code>auth_self</code>は、ユーザは特権が要求されるたびに自分のパスワードで認証する必要があることを意味する。 #: 値<code>auth_self_keep</code>は、<code>auth_self</code>と同様であるが、認証が一定時間続くことを意味する。 #: 値<code>auth_self_keep_session</code>は、ユーザはセッションごとに1度だけ自身のパスワードで認証する必要があり、特権はセッション全体に対して付与される。 #: 値<code>auth_self_keep_always</code>は、ユーザが自身のパスワードで認証する必要があるのは1度だけで、現在と将来のセッションに対して特権が付与される。 #: 値<code>auth_admin</code>は、管理者として認証が必要であることを意味する。 #: 値<code>auth_admin_keep</code>は、<code>auth_admin</code>と同様であるが、認証が一定時間続くことを意味する。 #: 値<code>auth_admin_keep_always</code>は、管理者として認証が必要であるのは1度だけで、現在と将来のセッションに対して特権が付与される。 #: <br> #* allow_inactiveエレメント #*: SSHやVNCのようなリモートセッションでログインした場合の特権 #* allow_activeエレメント #*: TTYやXディスプレイでマシンに直接ログインした場合の特権 #* allow_anyエレメント #*: 上記の両方で使用する特権 #: <br> # annotateエレメント #: PolKitがどのようにアクションを実行するかに関する特定の情報が含まれる。 #: 実行ファイルへの絶対パスを記述する。 #: <br> # annotate 4エレメント #: GUIがXディスプレイを開くことを許可するかどうかを記述する。 <br><br> == PolKitの設定例 == ==== GTKで開発されたGUIソフトウェアの場合 ==== PolKitにカスタムアクションを追加することにより、GTKで開発されたGUIソフトウェアをroot権限で実行することができる。<br> <br> 例えば、<code>pkexec</code>コマンドを使用してgeditを実行する場合、<br> /usr/share/polkit-1/actions/org.freedesktop.policykit.gedit.policyファイルを作成する必要がある。<br> <syntaxhighlight lang="xml"> <?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> </syntaxhighlight> <br> 詳細を知りたい場合は、以下に示すURLにアクセスして、リファレンスマニュアルを参照すること。<br> http://www.freedesktop.org/software/polkit/docs/0.105/pkexec.1.html<br> <br> ==== Qtで開発されたGUIソフトウェアの場合 ==== <u>Qtで開発されたGUIソフトウェアにおいては、PolKitにカスタムアクションを追加してもroot権限で実行することはできない。</u><br> その場合、PolKitのカスタムアクションは作成せずに、以下に示すコマンドを実行することにより、<code>pkexec</code>コマンドで実行できる。<br> <br> <u>ただし、動作には、/usr/share/polkit-1/actions/org.freedesktop.policykit.policyファイルが必要である。</u><br> # Qtで開発されたGUIソフトウェアをpkexecコマンドで実行する場合 export SHELL=/usr/bin/bash; \ # ログインシェルとターミナルのシェルが異なる場合 pkexec --disable-internal-agent \ env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY XDG_RUNTIME_DIR=<任意のディレクトリ 例. $XDG_RUNTIME_DIR または /tmp/tmp-runtime等> \ <Qtで開発されたGUIソフトウェアのパス> <br> ==== SkiaSharpで開発されたGUIソフトウェアの場合 ==== <u>SkiaSharpで開発されたGUIソフトウェアも、PolKitにカスタムアクションを追加してもroot権限で実行することはできない。</u><br> その場合、<code>gnomesu</code>コマンドまたは<code>kdesu</code>コマンドで実行することができる。<br> gnomesu <SkiaSharpで開発されたGUIソフトウェアのパス> # または kdesu <SkiaSharpで開発されたGUIソフトウェアのパス> <br><br> __FORCETOC__ [[カテゴリ:CentOS]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]][[カテゴリ:PinePhone]]
設定 - PolKit
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse