12,964
回編集
(ページの作成:「== 概要 == D-Busは、オープンソースのプロセス間通信(IPC:Inter Process Communication)機構であり、freedesktop.orgプロジェクトの一部である。<br> IPCとは、1台のコンピュータ上で動作する複数のプログラムの間で情報を交換するシステムのことである。<br> <br> IPCには、パイプ、名前付きパイプ、シグナル、共有メモリ、Unixソケット、ループバックソケット等が…」) |
|||
282行目: | 282行目: | ||
<br> | <br> | ||
<u>ただし、サードパーティ製のソフトウェアは、歴史的に、/etc/dbus-1/system.dディレクトリにXMLファイルをインストールしていたが、現在は非推奨とされており、</u><br> | <u>ただし、サードパーティ製のソフトウェアは、歴史的に、/etc/dbus-1/system.dディレクトリにXMLファイルをインストールしていたが、現在は非推奨とされており、</u><br> | ||
/etc/dbus-1/system.dディレクトリは、システム管理者のために予約されたものとして扱われるべきである。<br> | <u>/etc/dbus-1/system.dディレクトリは、システム管理者のために予約されたものとして扱われるべきである。</u><br> | ||
<br> | |||
==== D-Busサービスファイル ==== | |||
<syntaxhighlight lang="xml"> | |||
<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN" | |||
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd"> | |||
<busconfig> | |||
<policy user="root"> | |||
<allow own="org.example.HogeHelper"/> | |||
</policy> | |||
<policy context="default"> | |||
<allow send_destination="org.example.HogeHelper"/> | |||
<allow receive_sender="org.example.HogeHelper"/> | |||
</policy> | |||
</busconfig> | |||
</syntaxhighlight> | |||
<br> | |||
<code><policy user="root"></code>セクションは、rootユーザに適用されるポリシーを定義する。<br> | |||
* own (所有) の許可 | |||
*: rootユーザに対して、"org.example.HogeHelper"という名前のD-Busサービスを「所有」する権限を与える。 | |||
* サービスの起動と管理 | |||
*: D-Busサービスを「所有する」とは、そのサービスを起動および管理する権限を持つことを意味する。 | |||
* 排他的な制御 | |||
*: rootユーザのみがこのサービスを起動できる。 | |||
*: 他のユーザはこのサービスを所有したり、起動したりすることはできない。 | |||
* セキュリティの確保 | |||
*: 特権的な操作を行うサービスを、rootユーザのみが制御できるようにすることにより、セキュリティを高めている。 | |||
<br> | |||
この設定は、D-Busサービスが確実にroot権限で、かつroot権限でのみ実行されることを保証するものである。<br> | |||
これにより、特権的な操作を安全に実行できる環境を確立している。<br> | |||
<br> | |||
一般ユーザはサービスとの通信は可能であるが、サービスの起動や直接的な制御はrootユーザに制限されるため、セキュリティと機能性のバランスが取れた構成となっている。<br> | |||
<br> | |||
次に、<code><policy context="default"></code>セクションは、特に指定されていない全てのユーザに適用されるデフォルトのポリシーを定義する。<br> | |||
* <allow send_destination="org.example.HogeHelper"/> | |||
*: 全てのユーザがorg.example.HogeHelperサービスにメッセージを送信することを許可する。 | |||
*: つまり、どのユーザでもこのD-Busサービスのメソッドを呼び出すことができる。 | |||
* <allow receive_sender="org.example.HogeHelper"/> | |||
*: 全てのユーザがorg.example.HogeHelperサービスからのメッセージを受信することを許可する。 | |||
*: これにより、サービスからの応答や信号を全てのユーザが受け取ることができる。 | |||
<br> | |||
この設定は、一般ユーザがHogeHelperサービスと通信できることを保証するものである。<br> | |||
ただし、サービス自体はroot権限で実行されるため、特権的な操作を安全に行うことができる。<br> | |||
<br> | |||
サービスへのアクセスは許可しつつ、サービス自体の所有と実行はrootに制限することにより、特権的な操作を制御された方法で行うことができる。<br> | |||
<br> | |||
==== D-Busサービス定義ファイル ==== | |||
D-Busシステムは必要に応じて、ヘルパーサービスを自動的に起動することができる。<br> | |||
これにより、クライアントアプリケーションは、サービスの起動を意識することなく、単にD-Bus経由でサービスにアクセスするだけで済むようになる。<br> | |||
<syntaxhighlight lang="ini"> | |||
[D-BUS Service] | |||
Name=org.example.HogeHelper | |||
Exec=/usr/local/bin/HogeHelper | |||
# 任意 | |||
User=root | |||
# 任意 | |||
Environment=<環境変数> | |||
# 任意 | |||
# Systemdサービスユニットが必要な場合のみ | |||
SystemdService=HogeHelper.service | |||
</syntaxhighlight> | |||
<br> | |||
* Name | |||
*: D-Busサービスの名前を指定する。 | |||
*: クライアントがこの名前を使用して、D-Busサービスにアクセスする。 | |||
* Exec | |||
*: サービスを起動するための実行ファイルのパスを指定する。 | |||
* User (オプション) | |||
*: サービスを実行するユーザ名を指定する。 | |||
*: root権限で起動する場合は、<u>root</u>と指定する。 | |||
* SystemdService (オプション) | |||
*: 対応するSystemdサービスユニットの名前を指定する。 | |||
*: これが指定されている場合、D-BusはSystemdを使用してサービスを起動する。 | |||
* Environment (オプション) | |||
*: サービス用の環境変数。 | |||
<br> | |||
<code>SystemdService</code>行を含めることにより、D-BusはSystemdを使用してサービスを管理することができる。<br> | |||
これにより、より柔軟な起動制御や依存関係の管理が可能になる。<br> | |||
<br> | |||
* 動作の仕組み | |||
*# クライアントがサービスにアクセスしようとすると、D-Busはこのファイルを参照する。 | |||
*# 該当するD-Busサービスが実行されていない場合、D-BusはExec行で指定されたコマンドを使用して、サービスを起動する。 | |||
*# <code>SystemdService</code>行が指定されている場合、D-BusはSystemdにサービスの起動を要求する。 | |||
<br><br> | <br><br> | ||