Jump to contentJump to page navigation: previous page [access key p]/next page [access key n]
コンテンツコンテンツ
セキュリティ強化ガイド
  1. 前書き
  2. 1 セキュリティと機密保持
  3. 2 コモンクライテリア (Common Criteria)
  4. I 認証
    1. 3 PAM を利用した認証
    2. 4 NIS の使用
    3. 5 YaST を利用した認証クライアントの設定
    4. 6 389 LDAP ディレクトリサービス
    5. 7 Kerberos を利用したネットワーク認証
    6. 8 Active Directory サポート
    7. 9 FreeRADIUS サーバの構築
  5. II ローカルセキュリティ
    1. 10 物理的なセキュリティ
    2. 11 seccheck を利用した自動的なセキュリティチェック
    3. 12 ソフトウエア管理
    4. 13 ファイルの管理
    5. 14 パーティションやファイルの暗号化
    6. 15 cryptctl を利用したアプリケーション向けのストレージ暗号化
    7. 16 ユーザ管理
    8. 17 Spectre/Meltdown チェッカー
    9. 18 YaST を利用したセキュリティの設定
    10. 19 PolKit による認可制御
    11. 20 Linux でのアクセス制御リスト
    12. 21 証明書ストア
    13. 22 AIDE を利用した侵入検知
  6. III ネットワークセキュリティ
    1. 23 X Window System と X 認証
    2. 24 SSH: 機密を保持するネットワーク操作
    3. 25 マスカレードとファイアウオール
    4. 26 VPN サーバの設定
    5. 27 X Window System で動作する PKI マネージャ XCA による管理
  7. IV AppArmor による権限の制限
    1. 28 AppArmor の紹介
    2. 29 入門
    3. 30 プログラムに対する予防接種
    4. 31 プロファイルのコンポーネントと文法
    5. 32 AppArmor のプロファイルリポジトリ
    6. 33 YaST を利用したプロファイルの構築と管理
    7. 34 コマンドラインからのプロファイル構築
    8. 35 チェンジハット機能による Web アプリケーションのプロファイル作成
    9. 36 pam_apparmor によるユーザの制限
    10. 37 プロファイルを作成したアプリケーションの管理
    11. 38 サポート
    12. 39 AppArmor 用語集
  8. V SELinux
    1. 40 SELinux の設定
  9. VI Linux 監査フレームワーク
    1. 41 Linux 監査システムの概要
    2. 42 Linux 監査フレームワークの設定
    3. 43 監査ルールセットの紹介
    4. 44 その他の情報源
  10. A GNU ライセンス
ナビゲーション
適用先 openSUSE Leap 15.2

19 PolKit による認可制御

概要

PolKit (以前は PolicyKit として知られていたソフトウエア) は、権限を持たないユーザセッションと権限を持つシステムコンテキストとの間で仲介を行う、アプリケーションフレームワークです。ユーザセッション内のプロセスがシステムコンテキスト内で何らかの処理を実行しようとすると、 PolKit への問い合わせが発生します。問い合わせの結果は ポリシー と呼ばれる設定ファイルによって決められ、 はい, いいえ, 要認証 のいずれかの結果になります。 sudo などの従来型の権限認可プログラムとは異なり、セッション全体を root 権限で動作させたりするようなことはなく、単にアクションのみを問い合わせる仕組みになっています。

19.1 考え方の概要

PolKit はユーザやグループ、名前で特定のアクションを制限することによって動作する仕組みです。制限を課したあとは、それらのユーザがどのようにアクションを実行するのかを指定します。

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

グラフィカル環境やコンソールにログインして、ユーザがセッションを開始する際、セッションが作成され、 権限認証エージェント が結びつけられます。ここで、権限はシステムのメッセージバス内で動作するサービスとして実装されていますし、認証エージェントは現在の (セッションを開始した) ユーザを認証するために使用します。なお、ユーザはパスフレーズなどを利用して、その正当性を確認する処理を実施します。

それぞれのデスクトップ環境には、それぞれ独自の認証エージェントが用意されています。通常、これはお使いの環境が何であった場合でも、自動的に起動します。

19.1.2 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 にそれぞれ配置されます。それぞれのルールファイルは、アクションファイル内で指定されている特定のアクションを参照します。ルールは、ユーザのサブセットに対して、どのような制限を許可するのかを指定します。たとえば、ルールファイルは制限の厳しいアクセス許可を上書きすることができるほか、ユーザに対して許可することもできます。

19.1.3 利用可能なコマンド

PolKit には、特定の作業を行うためのいくつかのコマンドが用意されています (より詳しい説明については、マニュアルページをお読みください):

pkaction

設定済みのアクションに対して、詳細を取得します。詳しくは 19.3項 「権限の問い合わせ」 をお読みください。

pkcheck

指定したプロセスが認可されているかどうかを確認します。プロセスは --process もしくは --system-bus-name で指定します。

pkexec

認可されたユーザが、他のユーザで特定のプログラムを実行できるようにします。

pkttyagent

テキスト型の認証エージェントを起動します。このエージェントは、デスクトップ環境側に独自の認証エージェントが存在しない場合に、使用されます。

19.1.4 利用可能なポリシーと対応するアプリケーション

現時点では、権限を必要とする全てのアプリケーションが PolKit に対応しているわけではありません。下記には openSUSE® Leap で利用できる最も重要なポリシーについて、使用されるカテゴリを示しています。

PulseAudio
PulseAudio デーモンのスケジューリング優先順位の設定
CUPS
プリンタの追加/削除/編集/有効化/無効化
バックアップマネージャ
スケジュールの変更
GNOME
システムや GConf で必須となっている値の変更
システム時刻の変更
libvirt
ローカルの仮想マシンの管理と監視
NetworkManager
接続の適用と変更
PolKit
他のユーザに対する権限の読み込みと変更
既定値の変更
PackageKit
パッケージの更新と削除
リポジトリの変更と更新
ローカルファイルのインストール
ロールバック (巻き戻し)
リポジトリの鍵の取り込み
EULA の受け入れ
ネットワークプロキシの設定
システム
Wake on LAN
固定メディアやリムーバブルメディア、暗号化されたデバイスのマウントやマウント解除
リムーバブルメディアの取り出しと復号化
無線 LAN の有効化/無効化
Bluetooth の有効化/無効化
デバイスへのアクセス
システムの停止/サスペンド/休止/再起動
ドッキングステーションの取り外し
電源管理設定の変更
YaST
製品の登録
システムの時刻と言語の変更

19.2 認可の種類

PolKit が有効化されたプロセスが権限操作を行うと、このプロセスに対して権限が設定されているかどうかを PolKit に尋ねる処理を行います。 PolKit はそのプロセスに対して設定されているポリシーを元にして、応答を返します。応答は はい , いいえ, 要認証 のいずれかとなります。既定ではポリシーには 暗黙の 権限が含まれていて、それらは全てのユーザに対して自動的に適用されます。もちろん特定のユーザに対して、 明示的に 権限を指定することもできます。

19.2.1 暗黙の権限

暗黙の権限は、任意のアクションや非動作中のセッションに対して設定することができます。動作中のセッションとは、現在作業中のセッションを意味します。たとえばコンソールを切り替えたりすると、動作中のセッションが変更されます。暗黙の権限を いいえ に設定した場合はユーザを認可せず、 はい に設定した場合は全てのユーザを認可します。しかしながら、通常は必要に応じて認証を設定するのが一般的です。

ユーザは、 root として認証するか、もしくは自分自身として認証することによって、認可を得ることができます。いずれの認証に対しても、 4 種類の設定を行うことができます:

認証

ユーザは常に認証を行う必要があります。

一回限りの認証

認証は現在実行中のプログラムのインスタンスに結びつけられます。プログラムを起動し直してしまうと、ユーザは認証をし直す必要があります。

セッション認証の維持

認証ダイアログでは、 Remember authorization for this session (このセッションに対する認可を記憶する) というチェックボックスが表示されます。チェックを入れて進めると、認証はユーザがログアウトするまで記憶されます。

無期限認証の維持

認証ダイアログでは、 Remember authorization (認可を記憶する) というチェックボックスが表示されます。チェックを入れて進めると、認証は恒久的に記憶されるようになります。

19.2.2 明示的な権限

明示的な権限は、特定のユーザに対して与えることができるものです。全く制限無しに許可することもできますし、何らかの制約を指定することもできます。また、動作中のセッションに限定したり、ローカルのコンソールに限定したりすることもできます。

ユーザに対して権限を許可するだけでなく、ユーザに対して権限を禁止することもできます。禁止されたユーザの場合、既定の暗黙のポリシーで認可が許可されている場合でも、認可の必要な処理を行うことができなくなります。

19.2.3 既定の権限

PolKit に対応する各アプリケーションには、アプリケーションの開発者が規定した既定の暗黙ポリシーセットが用意されています。これらのポリシーは 提供元の既定値 と呼ばれます。提供元の既定値で設定された権限は、既定の SUSE システムで有効化されていない場合もあります。 openSUSE Leap では、提供元の既定値を上書きする、独自の権限セットが設定されています:

/etc/polkit-default-privs.standard

多くのデスクトップシステムで適切な権限が設定されています。

/etc/polkit-default-privs.restrictive

中央で管理されているマシン向けの設定です。

既定の権限を切り替えたい場合は、 /etc/sysconfig/security ファイル内にある POLKIT_DEFAULT_PRIVS の値を、 restrictive もしくは standard のいずれかに設定してください。設定が終わったら、 rootset_polkit_default_privs を実行します。

上述の 2 つのファイルについては、変更を行わないでください。独自の権限セットを構築したい場合は、 /etc/polkit-default-privs.local で設定を行ってください。詳しくは 19.4.3項 「暗黙の権限に対する設定ファイルの変更」 をお読みください。

19.3 権限の問い合わせ

権限を問い合わせたい場合は、 PolKit に含まれている pkaction コマンドをお使いください。

PolKit には権限を変更したり、他のユーザでコマンドを実行したりする (概要は 19.1.3項 「利用可能なコマンド」 で説明しています) ためのコマンドラインツールが付属しています。また、それぞれの既存のポリシーには識別のためのユニークな名前が設定されています。利用可能なポリシーを一覧で表示したい場合は、 pkaction コマンドをお使いください。詳しくは man pkaction をお読みください。

特定のポリシー (例: org.freedesktop.login1.reboot) に対して、必要な認可情報を表示したい場合は、 pkaction を下記のように実行します:

tux > pkaction -v --action-id=org.freedesktop.login1.reboot
org.freedesktop.login1.reboot:
  description:       Reboot the system
  message:           Authentication is required to allow rebooting the system
  vendor:            The systemd Project
  vendor_url:        http://www.freedesktop.org/wiki/Software/systemd
  icon:
  implicit any:      auth_admin_keep
  implicit inactive: auth_admin_keep
  implicit active:   yes

auth_admin_keep というキーワードは、ユーザに対してパスフレーズの入力を求めることを意味しています。

注記
注記: openSUSE Leap における pkaction の制限事項について

pkaction コマンドは、常に提供元の既定値に対して操作を行います。そのため、 openSUSE Leap で提供されている既定値を一覧で表示したり、既定値に戻したりすることはできません。詳しくは 19.5項 「既定の権限の復元」 をお読みください。

19.4 設定ファイルの修正

複数のマシンに対して同じポリシーセットを配置するような場合、たとえば特定のチーム内のコンピュータを設定するような場合は、設定ファイルを変更して権限を調整するのが便利です。暗黙の権限や明示的な権限についても、設定ファイルを変更することで実現することができます。

19.4.1 アクションルールの追加

お使いのシステムでどのようなアクションが利用できるのかは、どのパッケージをインストールしているのかによって決まります。概要を表示したい場合は、 pkaction を押して、定義済みの全てのルールを一覧で表示させてください。

下記では、例として gparted コマンド ( GNOME パーティションエディタ ) における PolKit との連携例を示しています。

/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
      key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
  </action>

</policyconfig>

1

ポリシーファイルのルート要素です。

2

アクションが 1 つだけ含まれています。

3

defaults 要素には、 SSH や VNC などを介したリモートセッション (allow_inactive 要素) のほか、 TTY や X ディスプレイによる直接ログイン (allow_active 要素) 、そしてその両方 (allow_any 要素) に対するアクセス許可が書かれています。 auth_admin という値は、管理者ユーザとしての認証が必要であることを表わしています。

4

annotate 要素には、 PolKit がアクションを実行する際の方法に関わる設定が書かれています。この例では、実行ファイルのパスと GUI から X ディスプレイを開く設定が書かれています。

独自のポリシーを追加したい場合は、上記のような構造で .policy ファイルを作成し、 id 属性に適切な値を設定して、既定のアクセス許可を記述してください。

19.4.2 認可ルールの追加

独自の認可ルールを作成することで、既定の設定を上書きして動作させることができます。独自の設定を作成する場合は、 /etc/polkit-1/rules.d/ ディレクトリ内にファイルを作成してください。

このディレクトリにファイルを配置する場合、ファイル名は 2 桁の数字ではじめ、その後ろにわかりやすい名前を続けて、末尾は .rules で終わらせます。これらのファイル内の関数は、並べ替えられた順に実行されます。たとえば 00-foo.rules ファイルは 60-bar.rules90-default-privs.rules ファイルの前に実行されます。

ファイル内では、アクション ID (.policy ファイルで定義されている値) が特定のものであるかどうかをチェックします。たとえば gparted というコマンドを admin グループ内の任意のユーザに対して許可したい場合は、 org.opensuse.policykit.gparted のアクション ID に対して、下記のような処理を記述します:

/* Allow users in admin group to run GParted without authentication */
polkit.addRule(function(action, subject) {
    if (action.id == "org.opensuse.policykit.gparted" &&
        subject.isInGroup("admin")) {
        return polkit.Result.YES;
    }
});

PolKit API 内で提供されている全てのクラスとメソッドについて、詳しくは http://www.freedesktop.org/software/polkit/docs/latest/ref-api.html をお読みください。

19.4.3 暗黙の権限に対する設定ファイルの変更

openSUSE Leap には、 2 種類の既定の認可ファイルが用意されています。それぞれ /etc/polkit-default-privs.standard/etc/polkit-default-privs.restrictive というパスになっています。詳しくは 19.2.3項 「既定の権限」 をお読みください。

独自の権限については、 /etc/polkit-default-privs.local ファイル内で定義します。ここで定義された権限は、その他の設定ファイル内に書かれているものよりも常に優先して適用されます。独自の権限セットを定義したい場合は、下記のようにして行います:

  1. /etc/polkit-default-privs.local ファイルを開きます。権限を定義するには、下記のような形式で各ポリシー向けの行を記述します:

    <権限の識別子>     <任意のセッション>:<非動作中のセッション>:<動作中のセッション>

    たとえば、下記のように指定します:

    org.freedesktop.policykit.modify-defaults     auth_admin_keep_always

    それぞれの セッション 内では、下記のような値を指定することができます:

    yes

    権限を許可します

    no

    権限を拒否します

    auth_self

    権限を要求した際、自分自身のパスワードを入力させます

    auth_self_keep_session

    権限を初めて要求した際、自分自身のパスワードを入力させます。いったん権限が許可されると、その許可はセッション内でずっと有効化されます

    auth_self_keep_always

    権限を初めて要求した際、自分自身のパスワードを入力させます。いったん権限が許可されると、その許可は永続的に有効化されます

    auth_admin

    権限を要求した際、 root のパスワードを入力させます

    auth_admin_keep_session

    権限を初めて要求した際、 root のパスワードを入力させます。いったん権限が許可されると、その許可はセッション内でずっと有効化されます

    auth_admin_keep_always

    権限を初めて要求した際、 root のパスワードを入力させます。いったん権限が許可されると、その許可は永続的に有効化されます

  2. あとは設定を反映させるため、 root で下記を実行します:

    # /sbin/set_polkit_default_privs
  3. 必要であれば、 pkaction コマンドを利用して、全ての権限識別子を一覧で表示させて確認します。

19.5 既定の権限の復元

openSUSE Leap には、既定で有効化されている権限セット集が存在していて、提供元の既定値を上書きして動作しています。詳細については 19.2.3項 「既定の権限」 をお読みください。

グラフィカルな PolKit ツールとコマンドラインのツールは、いずれも提供元の既定値に対して動作する仕組みで、 openSUSE Leap でも追加のコマンドラインである set_polkit_default_privs を用意しています。このコマンドは、 /etc/polkit-default-privs.* 内に設定されている値に権限をリセットするためのものです。ただし、 set_polkit_default_privs コマンドを実行すると、提供元の既定値を設定してポリシーをリセットすることになります。

手順 19.1: openSUSE Leap の既定値の復元
  1. /etc/polkit-default-privs.local ファイル内に、既定値を上書きするような設定が含まれていないことを確認します。

    重要
    重要: 独自のポリシー設定について

    /etc/polkit-default-privs.local 内にポリシーの設定が含まれていると、次の手順では既定値に上書きする形でそれらが適用されます。

  2. まずは提供元の既定値に戻したあと、 openSUSE Leap の既定値を適用します:

    tux > sudo rm -f /var/lib/polkit/* && set_polkit_default_privs
このページを印刷