[Linux]DBUSの説明_Dbus-Daemonの設定ファイル

dbus-daemonの設定ファイル

1)dbus-daemonの設定ファイルの概要
 
・メッセージバスデーモンは、ある特定のアプリ用に定義した設定ファイルを持つ。
・systemwideメッセージバス(/etc/dbus-1/system.conf)とper-user-login-sessionバス(/etc/dbus-1/session.conf)でそれぞれ専用の設定ファイルを持つ。
上記ファイルは通常、system-local.confまたはsession-local.confをインクルードする。
 
メインの設定ファイルを変更しないようにするため、ローカルのファイルを用意してオーバーライドする。
 
●デフォルトの設定ファイル
 
①/etc/dbus-1/system.conf
  system
  dbus
  
  /lib64/dbus-1/dbus-daemon-launch-helper
  /var/run/messagebus.pid
  
  EXTERNAL
  unix:path=/var/run/dbus/system_bus_socket
  system.d
  system-local.conf
  contexts/dbus_co
ntexts 
②/etc/dbus-1/session.conf
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
  session
    unix:tmpdir=/tmp 
  session.d
  session-local.conf
  contexts/dbus_co
ntexts

  1000000000
  1000000000
  1000000000
  120000
  240000
  100000
  10000
  100000
  10000
  50000
  50000
  50000
2)doctype宣言、Root要素、type
①doctype宣言
・設定ファイルはXML文書
  “http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd”>
②Root要素
③タイプ type
・メッセージバスのwell-knownタイプ。
・現状は、知られているのは”system”と”session”
・上記以外が設定された場合は、D-Busのspecificationまたはnamespacedに追加される。
・複数設定された場合は最後が優先。
・この要素は、有効にされたクライアントでどのメッセージバス環境変数がセットされたかのみ管理する。
ポリシーは他の要素で管理される。
 
○”session”の場合に設定される環境変数
DBUS_STARTER_BUS_TYPE ”session”
DBUS_SESSION_BUS_ADDRESS セッションバスのアドレス
 
○”system”の場合に設定される環境変数
DBUS_STARTER_BUS_TYPE ”system”
DBUS_SESSION_BUS_ADDRESS システムバスのアドレス
 
3)include、includedir
 
・指定したファイルをインクルード。
・相対パスの場合は、このインクルードしている設定ファイルを基準
・ignore_missing=(yes|no)
デフォルトはno。ファイルが存在しない場合にエラーにならないようにする。
 
・指定したディレクトリ内でファイル名が”.conf”で終わるファイルをインクルード
 
③デフォルト設定
○/etc/dbus-1/system.conf
< includedir>system.d
< include ignore_missing=”yes”>system-local.conf
< include if_selinux_enabled=”yes” selinux_root_relative=”yes”>contexts/dbus_contexts
 
○/etc/dbus-1/session.conf
< includedir>session.d
< include ignore_missing=”yes”>session-local.conf
< include if_selinux_enabled=”yes” selinux_root_relative=”yes”>contexts/dbus_contexts
 
4)user、fork、keep_umask
 
・そのデーモンを実行するユーザーアカウントを指定。
・起動時にそのUIDに変更できなかった場合は、exitする。
・指定されていない場合は、UIDを変更せず関知しない
・ユーザーは、そのBusが初期化された後に変更される。
従ってソケットなどはユーザー変更前に生成され、クライアントからデータを読まれることもない。
 逆に言うとソケットとPIDファイルはroot権限でないと書き込みできない場所で生成される。
・/etc/dbus-1/system.confでのデフォルト値はdbus
 
・指定されている場合は、そのbusデーモンは真のデーモン(バックグラウンドでfork)となる。
・/etc/dbus-1/system.confでは、デフォルトで指定されている。
 
・forkする際、オリジナルのumask値を維持する。
・/etc/dbus-1/session.confでは、デフォルトで指定されている。
 
5)listen
・そのbusがリッスンするアドレスを追加する。
・形式は下記のようにトランスポート層の名前とパラメータ、オプションを指定する。
unix:path=/tmp/foo
< listen>tcp:host=localhost,port=1234
・複数の要素を指定する事も可能で、複数のアドレスをリッスンする。
busは起動されたサービスなどに最後に指定されたアドレスから順に渡す。
・tcpソケットは、IPv4アドレス、IPv6アドレス、ホスト名を受け取る事が出来る。
ホスト名が複数のアドレスに名前解決される場合は、すべてがバインドされる。
・IPv4、v6を明示的に指定する場合は、下記のようにfamilyオプションを使用する。
tcp:host=localhost,port=0,family=ipv4
・portが0の場合や指定されていない場合は、OSが利用可能なポート番号を割り当てる。
・bind=hostnameオプションを使うと、busによってレポートされるアドレスを変更せずに、tcpのhostオプションでバインドしたアドレスをオーバーライド出来る。
・bind=*を指定するとすべてのローカルアドレス(INADDR_ANY)をリッスンする。
tcp:host=localhost,bind=*,port=0
●デフォルト設定
○/etc/dbus-1/system.conf
< listen>unix:path=/var/run/dbus/system_bus_socket
○/etc/dbus-1/session.conf
< listen>unix:tmpdir=/tmp
6)auth、servicehelper
 
・使用が許可された権限メカニズム。
・この要素が指定されていない場合は、すべての既知のメカニズムの利用を許可。
・複数設定されている場合はすべて許可される。順番は意味を持たない。
 
●デフォルト設定
○/etc/dbus-1/system.conf
< auth>EXTERNAL
・システムデーモンを代替ユーザーを使って起動するのに使用されるsetuidヘルパーを指定する。
・libexec内のdbus-daemon-launch-helperが代表的。
・この要素はper-system busデーモンでのみ意味を持つ。
 
●デフォルト設定
○/etc/dbus-1/system.conf
< servicehelper>/lib64/dbus-1/dbus-daemon-launch-helper
7)servicedir
・.serviceファイルをスキャンするディレクトリを追加する。
・複数のディレクトリがある場合は、設定ファイル内の後ろにあるディレクトリが先にスキャンされる。
・サービスファイルはプログラムを自動で起動する方法をbusに示す。
・主にper-user-sessionバスで使用される。

・サービスファイルを探すディレクトリを指定。
・/etc/dbus-1/session.confで定義されたper-user-session bus daemonでのみ意味を持つ
 
●デフォルト設定
○/etc/dbus-1/session.conf
< standard_session_servicedirs />
・サービスファイルを探すディレクトリを指定。
・/etc/dbus-1/system.confで定義されたper-system bus daemonでのみ意味を持つ
・デフォルトは、/usr/share/dbus-1/system-services
 
●デフォルト設定
○/etc/dbus-1/system.conf
< standard_system_servicedirs/>
8)limit
limitでresourceのリミットを設定できる。
 
●デフォルトの設定例
○/etc/dbus-1/session.conf
< limit name=”max_incoming_bytes”>1000000000
< limit name=”max_outgoing_bytes”>1000000000
< limit name=”max_message_size”>1000000000
< limit name=”service_start_timeout”>120000
< limit name=”auth_timeout”>240000
< limit name=”max_completed_connections”>100000
< limit name=”max_incomplete_connections”>10000
< limit name=”max_connections_per_user”>100000
< limit name=”max_pending_service_starts”>10000
< limit name=”max_names_per_connection”>50000
< limit name=”max_match_rules_per_connection”>50000
< limit name=”max_replies_per_connection”>50000
 
●limitで設定できる名前
“max_incoming_bytes”、”max_outgoing_bytes”、”max_message_size”、”service_start_timeout”、”auth_timeout”、”max_completed_connections”、”max_incomplete_connections”、”max_connections_per_user”、”max_pending_service_starts”、”max_names_per_connection”、”max_match_rules_per_connection”、”max_replies_per_connection”、”reply_timeout”
 
※注意点
・incoming/outgoingのmax以下であれば新しいメッセージをキューイングできるので”max_message_size”を超過する事もできる。
 
・”max_completed_connections”を”max_connections_per_user”で割った値がDOS(denial-of-service)によって他のユーザーがシステムワイドバス上ですべてのコネクションを使い果たしても利用できるユーザー数。
 
9)policyエレメント
エレメントの概要
・バスに対する特定の接続に適用するセキュリティポリシーを定義する。
・ポリシーは、allowとdenyエレメントを使って定義する。
・ポリシーは通常systemwideバスで使用され、ファイアーウォールと似た役割。
・現在システムバスは、メソッドコールの送信とバスの名前を所有する事を禁止するデフォルトのポリシーを持つ。
< deny send_type=”method_call”/>
・一般的には、システムバスは出来るだけ小さく、プログラムはそれ自身のプロセス内で実行され、一つのバス名を提供する事がベスト。
エレメントは下記4つの属性のいずれかを持つ。
context=”(default|mandatory)”
at_console=”(true|false)”
user=”username or userid”
group=”group name or gid” 
●デフォルト設定
○/etc/dbus-1/system.conf
< policy context=”default”> 
○/etc/dbus-1/session.conf
< policy context=”default”>
②policyエレメントのdeny、allow
・denyは、policyエレメントのすぐ下で設定し、禁止するアクションを設定する。
・allowはその前に記述したdenyの設定に対して許可する設定をする。
・上位に記述したdenyの要素がマッチしたらそのアクションは拒否され、下位のルールは無視される。
・設定できる属性は下記の通り。
send_interface=”interface_name”
send_member=”method_or_signal_name”
send_error=”error_name”
send_destination=”name”
send_type=”method_call” | “method_return” | “signal” | “error”
send_path=”/path/name”
 
receive_interface=”interface_name”
receive_member=”method_or_signal_name”
receive_error=”error_name”
receive_sender=”name”
receive_type=”method_call” | “method_return” | “signal” | “error”
receive_path=”/path/name”
send_requested_reply=”true” | “false”
receive_requested_reply=”true” | “false”
 
eavesdrop=”true” | “false”
 
own=”name”
user=”username”
group=”groupname”
③デフォルト設定
○/etc/dbus-1/system.conf
< allow user=”*”/>
< deny own=”*”/>
< deny send_type=”method_call”/>
< allow send_type=”signal”/>
< allow send_requested_reply=”true” send_type=”method_return”/>
< allow send_requested_reply=”true” send_type=”error”/>
< allow receive_type=”method_call”/>
< allow receive_type=”method_return”/>
< allow receive_type=”error”/>
< allow receive_type=”signal”/>
< allow send_destination=”org.freedesktop.DBus”/>
< deny send_destination=”org.freedesktop.DBus”
send_interface=”org.freedesktop.DBus”
send_member=”UpdateActivationEnvironment”/>
○/etc/dbus-1/session.conf
 allow send_destination=”*” eavesdrop=”true”/>
< allow eavesdrop=”true”/>
< allow own=”*”/>

コメント