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

18 Polkit 認可フレームワーク Edit source

概要

Polkit はグラフィカルな Linux デスクトップ環境で使用される認可フレームワークで、システムでの権限管理をより精密に行うための仕組みです。従来の Linux システムでは、最高位のシステム権限を持つユーザとして root を規定し、それ以外のユーザやグループと分離していましたが、サウンドハードウエアにアクセスするための audio グループなどのように、 root とは別の権限構成も存在していました。このような構成では、特定の状況下に対応できなくなってしまうほか、一時的に許可するようなことも実現できませんでした。

このような場合、通常は sudo コマンドなどで root に成り代わり、特権を得て作業を行うことになりますが、 Polkit では要件に応じて特定のユーザやグループに対して、必要な権限のみを与えることができます。権限は処理と権限内容を記した設定ファイル内で動的に対応することができます。

18.1 考え方の概要 Edit source

Polkit は複数のコンポーネント (部品) から構成されています。まず polkitd は裏で動作する特権サービスで、 Polkit の設定ファイルを読み込んで必要な認証チェックを実施します。 Polkit 対応のアプリケーションは認証要求を polkitd に送信しますが、このとき特権を持たない Polkit 認証エージェントが動作して、 polkitd が求める認証要求を表示します。ここでユーザが対話的に入力した値は、エージェントを介して polkitd に送信されます。

Polkit での アクション は、 Polkit の認可ルールに記された 1 つの処理を意味します。このアクションはたとえば、コンピュータを再起動したいなどの意図を表します。それぞれのアクションには唯一の ID が設定され、たとえばコンピュータの再起動であれば org.freedesktop.login1.reboot という名称が割り当てられています。

18.1.1 認証エージェント Edit source

ユーザが完全機能のデスクトップ環境内でグラフィカルなセッションを開始すると、認可エージェントが裏で自動的に起動されます。このエージェントは何らかの認証が必要となった場合にのみ表に現れるだけで、それ以外の状況では表には全く現れません。なお、テキストモードで起動した場合や SSH 経由でログインした場合は自動で起動されませんので、以降はグラフィカルなセッションを想定して記しています。

18.1.2 Polkit の設定 Edit source

Polkit の設定は、 アクション認可ルール を元にして作られています:

アクション (ファイルの拡張子 *.policy )

XML ファイル形式で記述され、 /usr/share/polkit-1/actions 内に配置されます。それぞれのファイルは 1 つ以上のアクションを定義していて、それぞれのアクションには説明と既定のアクセス許可が設定されます。システム管理者側では独自のルールを作成することができますが、 Polkit 側が提供するファイルについては、編集してはなりません。

認可ルール (ファイルの拡張子 *.rules )

ルールは JavaScript プログラミング言語で記述され、 2 箇所に配置されます。システムが提供するパッケージの場合は /usr/share/polkit-1/rules.d に、独自に作成するファイルの場合は /etc/polkit-1/rules.d にそれぞれ配置します。それぞれのルールファイルには既定の認可設定のほか、複雑なロジックで権限を判断するようなことができます。たとえばルールファイルでは制限の厳しいアクセス許可を上書きすることができるほか、特定のユーザには認証 無しで実行できるようにしたりすることができます。

18.1.3 Polkit のユーティリティ Edit source

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

pkaction

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

pkcheck

特定の Polkit のアクションに対して、プロセスが認可されているかどうかを確認します。

pkexec

Polkit の認可設定に従って、異なるユーザでプログラムを実行できるようにします。 susudo に似た仕組みです。

pkttyagent

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

18.2 認可の種類 Edit source

Polkit を有効化したプロセスが権限操作を行うと、このプロセスに対して権限が設定されているかどうかを Polkit に尋ねる処理を行います。 Polkit はそのプロセスに対して設定されているポリシーを元にして、応答を返します。応答は yes (はい), no (いいえ), authentication needed (要認証) のいずれかとなります。 authentication needed (要認証) の場合はユーザに対して認証ダイアログを表示し、必要な認可を得る処理を行います。

18.2.1 暗黙の認可 Edit source

特定のアクションに対して専用の Polkit JavaScript ルールが記述されていない場合、その結果は、 Polkit のポリシーファイルの各アクションに対して設定されている暗黙の認可設定に従って決定されます。この暗黙の認可設定には allow_active , allow_inactive , allow_any の 3 種類があります。 allow_active は動作中のセッション内にいるユーザに適用されるもので、テキストモードやグラフィカルユーザインターフェイスでログインしているユーザに適用されます。なお、ログイン中であっても、ユーザがコンソールを切り替えるなどして動作中でなくなると、 allow_inactive が適用されます。また、 allow_any は SSH や VNC などでログインしているリモートのユーザなど、それ以外の状況下で適用されます。これらそれぞれに対して、下記に示すいずれかの認可を割り当てることができます:

no

そのアクションに対して決して認可を与えないようにします。

yes

認証情報を入力することなく、そのアクションに対して常に認可を与えるようにします。

auth_self

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

auth_self_keep

auth_self に似ていますが、認証情報を一定時間だけ保持します。つまり、同じアプリケーションから繰り返し同じアクションを実行した場合、パスワードの入力を求めなくなります。

auth_admin

権限を要求した際、管理者 (root) のパスワードを入力させるようにします。

auth_admin_keep

auth_self_keep と同様に、管理者 (root) のパスワードを一定時間だけ保持します。

18.2.2 SUSE 既定の権限 Edit source

ここまでに説明してきた Polkit のポリシーファイル内の暗黙の認可設定は、アプリケーションの開発者が規定した既定の暗黙ポリシーセットが元になっています。このようなポリシーは 提供元の既定値 と呼ばれます。提供元の既定値で設定された権限は、既定の SUSE システムで有効化されていない場合もあります。 openSUSE Leap では、提供元の既定値を上書きする独自の権限セットを用意していますが、これには 3 種類のセットが含まれています:

/etc/polkit-default-privs.easy

利用者が管理者自身であり、それ以外には誰も使用しないような、単一のデスクトップシステム向けの権限セットです。使いやすさを重視した設定であるため、セキュリティという観点では弱い設定です。

/etc/polkit-default-privs.standard

ほとんどのシステムに対して適用できる均衡の取れた権限セットです。

/etc/polkit-default-privs.restrictive

使いやすさを犠牲にして、考えられる攻撃手法をできる限り無効化することを目指した、より保守的な権限セットです。

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

上述のファイルについては変更してはなりません。独自の権限セットを構築したい場合は、 /etc/polkit-default-privs.local で設定してください。詳しくは 18.4.3項 「SUSE 既定の権限設定の変更」 をお読みください。

18.3 権限の問い合わせ Edit source

権限を問い合わせたい場合は、 Polkit に含まれている pkaction コマンドを使用します。

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

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

> 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
注記
注記: openSUSE Leap における pkaction の制限事項について

pkaction は提供元の既定値に対してのみ作用するもので、提供元の既定値を上書きする SUSE の既定値に対しては作用しないことに注意してください。そのため、出力結果は注意して解釈する必要があります。

18.4 Polkit の設定変更 Edit source

たとえば特定のチーム内に配布するコンピュータをセットアップするような場合など、複数のマシンに同じポリシーセットを設定したいような場合、 Polkit の設定を修正する必要があります。このほか、 Polkit の認可設定をカスタマイズすることで、特定のアクションに対するセキュリティを強化したり、よく使用されるアクションに対して繰り返しのパスワード入力を省略したりなどを行うこともできます。ただし、認証無しで Polkit のアクションを不用意に実行できるように設定してしまうと、設定によっては完全な root 権限を得る結果になってしまうこともあります。そのため、 Polkit で認証設定を弱くする場合は、お使いの環境下でシステムのセキュリティを侵さない範囲でのみ設定するようにしてください。

18.4.1 Polkit ポリシーファイルの上書き Edit source

お使いのシステムでどのようなアクションが利用できるのかは、どのパッケージをインストールしているのかによって決まります。概要を表示したい場合は、 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-polkit-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

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

2

このポリシー内で唯一設定されたアクションの開始位置です。

3

ここには暗黙の認可が設定されています。

4

annotate 要素には、 Polkit がアクションを実行する際の方法に関わる設定が書かれています。この例では、 gparted 実行ファイルのパスのほか、グラフィカルな表示を許可するための設定が書かれています。この要素は Polkit のツールである pkexec を使用する際に必要な設定です。

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

注記
注記: 以前の名称 PolicyKit について

Polkit 認可フレームワークは以前、 PolicyKit という名称で呼ばれていました。このことから、 XML 文書の属性値などには古い名称が残っている場合があります。

18.4.2 JavaScript 認可ルールの追加 Edit source

独自の認可ルールを作成することで、暗黙の認可を上書きして動作させることができます。独自のルールを作成する場合は、 /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 内で提供されている全てのクラスとメソッドについて、詳しくは https://www.freedesktop.org/software/polkit/docs/latest/ref-api.html をお読みください。

18.4.3 SUSE 既定の権限設定の変更 Edit source

18.2.2項 「SUSE 既定の権限」 で説明しているとおり、 SUSE では、提供元の開発者が設定した Polkit の暗黙の認可設定を上書きする設定を提供しています。それ以外の独自の権限については、 /etc/polkit-default-privs.local ファイル内に記述してください。ここで定義された権限は、その他の設定ファイル内に書かれているものよりも常に優先して適用されます。独自の権限セットを定義したい場合は、下記のようにして行います:

手順 18.1: 既定の権限設定の変更
  1. /etc/polkit-default-privs.local ファイルを編集します。権限を定義するには、下記のような形式で各アクション向けの行を記述します:

    <アクション-ID>     <任意のセッションに対する認可指定>:<非動作中のセッションに対する認可指定>:<動作中のセッションに対する認可指定>

    3 種類全てのカテゴリに対して同じ設定を適用したい場合は、下記のように 1 つだけ値を指定してもかまいません:

    <アクション-ID>     <全てのセッションに対する認可指定>

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

    org.freedesktop.color-manager.modify-profile     auth_admin_keep
  2. あとは設定を反映させるため、 root で下記を実行します:

    # /sbin/set_polkit_default_privs

SUSE での Polkit 既定値に関する詳しいドキュメンテーションについては、 man polkit-default-privs をお読みください。

18.5 SUSE 既定の権限設定の復元 Edit source

認可設定を SUSE 提供の既定値に戻したい場合は、下記の手順を実施します:

手順 18.2: openSUSE Leap の既定値の復元
  1. まずは 18.2.2項 「SUSE 既定の権限」 で説明している設定値のいずれかを選択します。

  2. /etc/polkit-default-privs.local に記述している全ての上書き設定を削除します。

  3. あとは set_polkit_default_privs を実行すると、既定値に戻すことができます。

このページを印刷