dbus デーモン
これは、Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、または MAC OS オンライン エミュレーターなどの複数の無料オンライン ワークステーションの XNUMX つを使用して、OnWorks 無料ホスティング プロバイダーで実行できるコマンド dbus-daemon です。
プログラム:
NAME
dbus-daemon - メッセージ バス デーモン
SYNOPSIS
dbus デーモン
dbus デーモン [--バージョン] [--セッション] [--システム] [--config-file=FILE]
[ -- 印刷アドレス [=記述子]] [--print-pid [=記述子]] [ - フォーク]
DESCRIPTION
dbus デーモン D-Bus メッセージ バス デーモンです。 見る http://www.freedesktop.org/software/dbus/
全体像について詳しくは、こちらをご覧ください。 D-Bus は、まず次の機能を提供するライブラリです。
任意の XNUMX つのアプリケーション間の XNUMX 対 XNUMX 通信。 dbus デーモン は、
は、このライブラリを使用してメッセージ バス デーモンを実装します。 複数のプログラムが接続します。
メッセージ バス デーモンと連携し、相互にメッセージを交換できます。
標準メッセージ バス インスタンスは XNUMX つあります。システム全体のメッセージ バス (
多くのシステムは「メッセージバス」初期化サービスとして) およびユーザー ログイン セッションごとのメッセージ バス
(ユーザーがログインするたびに開始されます)。 dbus デーモン これらの両方のインスタンスに使用されますが、
別の構成ファイルを使用します。
--session オプションは、「--config-file=」と同等です。/usr/share/dbus-1/session.conf"と
--system オプションは「--config-file=」と同等です。/usr/share/dbus-1/system.conf"。 に
追加の構成ファイルを作成し、 --config-file オプションを使用すると、追加の
特殊な目的のメッセージ バス デーモンを作成できます。
システム全体のデーモンは通常、init スクリプトによって起動され、標準的には単に次のように呼ばれます。
「メッセージバス」。
システム全体のデーモンは主に、システム イベントのブロードキャストに使用されます。
プリンターキュー、またはデバイスの追加/削除。
セッションごとのデーモンは、デスクトップ間のさまざまなプロセス間通信に使用されます。
アプリケーション (ただし、X または GUI にはまったく関連付けられていません)。
SIGHUP により、D-Bus デーモンはその構成ファイルを部分的に再ロードし、フラッシュします。
ユーザー/グループ情報がキャッシュされます。 一部の構成変更では、すべてをキックする必要があります
アプリはバスから離れます。 したがって、デーモンを再起動した場合にのみ有効になります。 ポリシーの変更
SIGHUP で有効になるはずです。
OPTIONS
次のオプションがサポートされています。
--config-file = FILE
指定された構成ファイルを使用します。
- フォーク
構成ファイルがそうなっていても、メッセージ バスを強制的にフォークしてデーモンにします。
そうすべきであるとは指定していません。 ほとんどのコンテキストでは、設定ファイルはすでにこれを取得しています
そうですけど。 このオプションは Windows ではサポートされていません。
--nofork
構成ファイルが変更されていても、メッセージ バスがフォークしてデーモンにならないように強制します。
そうすべきであることを指定します。 Windows では、dbus-daemon はフォークしないため、このオプションは
許可されていますが、何もしません。
--print-address[=DESCRIPTOR]
メッセージ バスのアドレスを標準出力または指定されたファイルに出力します。
ディスクリプタ。 これは、メッセージ バスを起動するプログラムによって使用されます。
--print-pid[=説明]
メッセージ バスのプロセス ID を標準出力または指定されたファイルに出力します。
ディスクリプタ。 これは、メッセージ バスを起動するプログラムによって使用されます。
- セッション
ログインセッションごとのメッセージバスの標準構成ファイルを使用します。
- システム
システム全体のメッセージ バスには標準構成ファイルを使用します。
- バージョン
デーモンのバージョンを出力します。
--内省する
すべての D-Bus 内部インターフェイスのイントロスペクション情報を出力します。
--アドレス[=アドレス]
リッスンするアドレスを設定します。 このオプションは、
設定ファイル
--systemd-アクティベーション
systemd スタイルのサービスのアクティブ化を有効にします。 systemd と組み合わせた場合にのみ役立ちます
Linux 上のシステムおよびセッション マネージャー。
--nopidfile
構成ファイルで PID ファイルが構成されている場合でも、PID ファイルを書き込まないでください。
CONFIGURATION FILE
メッセージ バス デーモンには、特定の目的に特化した構成ファイルがあります。
応用。 たとえば、ある構成ファイルは、メッセージ バスを
システム全体のメッセージ バスである場合もあれば、ユーザーのログイン セッションごとのバスになるように設定されている場合もあります。
構成ファイルは、リソース制限やセキュリティ パラメータなども確立します。
前方へ。
構成ファイルは相互運用性仕様の一部ではなく、その後方仕様にも含まれていません。
互換性は保証されません。 このドキュメントはドキュメントであり、仕様ではありません。
標準のシステム全体およびセッションごとのメッセージ バスのセットアップは、次のファイルで構成されます。
"/usr/share/dbus-1/system.conf"と"/usr/share/dbus-1/session.conf". これらのファイルは通常、
system-local.conf または session-local.conf /etc/dbus-1; ローカルに置くことができます
プライマリ構成ファイルの変更を避けるために、これらのファイルをオーバーライドします。
設定ファイルは XML ドキュメントです。 次の doctype 宣言が必要です。
<!DOCTYPEbusconfig PUBLIC "-//freedesktop//DTD D-Bus バス構成 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
構成ファイルには次の要素が存在する場合があります。
·
ルート要素。
·
メッセージ バスの既知のタイプ。 現在知られている値は「system」と「session」です。
他の値が設定されている場合は、D-Bus 仕様に追加するか、
名前空間。 最後要素「wins」(以前の値は無視されます)。 この要素
どのメッセージ バス固有の環境変数がアクティブ化された状態で設定されるかを制御するだけです
クライアント。 セッション バスとシステム バスを区別するポリシーのほとんどは次のとおりです。
構成ファイル内の他の要素から制御されます。
メッセージ バスの既知のタイプが「セッション」の場合、DBUS_STARTER_BUS_TYPE
環境変数は「session」および DBUS_SESSION_BUS_ADDRESS 環境に設定されます。
変数はセッション バスのアドレスに設定されます。 同様に、
メッセージ バスが「system」の場合、DBUS_STARTER_BUS_TYPE 環境変数が設定されます
"system" に設定すると、DBUS_SESSION_BUS_ADDRESS 環境変数が
システム バスのアドレス (いずれにしても通常はよく知られています)。
例: セッション
·
ファイルを含めるファイル名.conf この時点で。 ファイル名が
相対的な場合は、インクルードを実行する構成ファイルに対して相対的に配置されます。
オプションの属性「ignore_missing=(yes|no)」があり、次の場合にデフォルトで「no」になります。
提供されていない。 この属性は、インクルードされたファイルにとって致命的なエラーであるかどうかを制御します。
不在であります。
·
すべてのファイルを含める食べ物この時点で。 ディレクトリ内のファイル
は不定の順序で含まれます。 「.conf」で終わるファイルのみが含まれます。
これは、特定のパッケージによるシステム バスの拡張を可能にすることを目的としています。 例えば、
CUPS がプリンター キューの変更の通知を送信できるようにしたい場合は、
ファイルを /usr/share/dbus-1/system.d にインストールするか、 /etc/dbus-1/system.d すべてのアプリを許可しました
このメッセージを受信し、プリンター デーモン ユーザーがメッセージを送信できるようにしました。
·
デーモンを実行するユーザー アカウント (ユーザー名または UID として)。 デーモンの場合
起動時にこの UID に変更することはできないため、終了します。 この要素が存在しない場合、
デーモンはその UID を変更したり気にしたりしません。
最後ファイル内のエントリが「win」であり、他のエントリは無視されます。
ユーザーは、バスの初期化が完了した後に変更されます。 したがって、ソケットなどは
ユーザーを変更する前に作成されますが、ユーザーを変更する前はクライアントからデータが読み取られません。
これは、root が必要な場所にソケットと PID ファイルを作成できることを意味します。
書き込み権限。
·
存在する場合、バス デーモンは実際のデーモンになります (バックグラウンドへのフォークなど)。 これ
通常、 --fork コマンド ライン オプションではなく、 が使用されます。
·
存在する場合、バス デーモンはフォーク時に元の umask を保持します。 これは次のような場合に役立つかもしれません
子プロセスの動作に影響を与えないようにします。
·
存在する場合、バス デーモンは syslog にログを記録します。
·
存在する場合、バス デーモンはその pid を指定されたファイルに書き込みます。 --nopidfile
コマンドライン オプションはこの設定より優先されます。
·
存在する場合、ANONYMOUS メカニズムを使用して認証された接続は、
接続を許可されています。 このオプションは、ANONYMOUS メカニズムが使用されない限り、実際的な効果はありません。
を使用しても有効になっています 以下で説明する要素。
·
バスがリッスンするアドレスを追加します。 アドレスは標準の D-Bus 形式です
これには、トランスポート名と使用可能なパラメータ/オプションが含まれます。
例: unix:path=/tmp/foo
例: tcp:ホスト=ローカルホスト、ポート=1234
複数ある場合要素を含む場合、バスは複数のアドレスをリッスンします。 の
バスは、開始されたサービスまたはその他の関係者にそのアドレスを最後に伝えます。
で与えられた住所初め。 つまり、アプリは最後の接続に接続しようとします。
まずはアドレス。
tcp ソケットは、IPv4 アドレス、IPv6 アドレス、またはホスト名を受け入れることができます。 ホスト名が解決された場合
複数のアドレスにバインドすると、サーバーはそれらすべてにバインドします。 family=ipv4 または family=ipv6
オプションを使用して、アドレスのサブセットに強制的にバインドできます
例: tcp:ホスト=ローカルホスト、ポート=0、ファミリー=ipv4
特殊なケースは、ポート番号 XNUMX を使用する (またはポートを省略する) ことです。これは、次のことを意味します。
オペレーティング システムによって選択された使用可能なポートを選択します。 選択できるポート番号は次のとおりです。
--print-address コマンド ライン パラメータで取得され、他のファイルに存在します。
DBUS_SESSION_BUS_ADDRESS が指定されている場合など、サーバーが独自のアドレスを報告する場合
設定します。
例: tcp:ホスト=ローカルホスト、ポート=0
tcp/nonce-tcp アドレスでは、リッスン可能なアドレスで使用される、bind=hostname オプションも許可されます。
サーバーがリッスンするインターフェイスを設定します。ホスト名は IP です。
ローカル マシンのインターフェイスの 127.0.0.1 つのアドレス (最も一般的には XNUMX)、DNS 名
これらの IP アドレスの 0.0.0.0 つ「4」に解決され、すべての IPvXNUMX インターフェイスでリッスンします。
同時に、または「::」を使用してすべての IPv4 および IPv6 インターフェイスを同時にリッスンします (
OSでサポートされています)。 指定しない場合、デフォルトは「host」と同じ値になります。
例: tcp:ホスト=ローカルホスト、バインド=0.0.0.0、ポート=0
·
許可された認可メカニズムをリストします。 この要素が存在しない場合は、すべてが既知です
メカニズムは許可されています。 複数ある場合要素、リストされたすべてのメカニズム
許可されています。 メカニズムがリストされている順序は意味がありません。
例: 外部の
例: DBUS_COOKIE_SHA1
·
.service ファイルをスキャンするディレクトリを追加します。 ディレクトリは次からスキャンされます。
構成ファイルに最初に表示される (最初に見つかった .service ファイル
特定のサービスが使用されます)。
サービス ファイルは、プログラムを自動的に開始する方法をバスに指示します。 主に使用されるのは、
システム全体のバスではなく、ユーザーセッションごとのバスを使用します。
·
一連のを指定するのと同じです
「XDG ベース ディレクトリ仕様」の各データ ディレクトリの要素
サブディレクトリ「dbus-1/services」、たとえば「/usr/share/dbus-1/services" だろう
検索されたディレクトリの中から。
「XDG ベース ディレクトリ仕様」は、次の場所にあります。
http://freedesktop.org/wiki/Standards/basedir-spec 動かない場合は、それ以外の場合は試してください
お気に入りの検索エンジン。
のこのオプションはユーザーセッションごとのバスにのみ関連します
/etc/dbus-1/session.conf で定義されたデーモン。 他の設定ファイルに置く
おそらくナンセンスだろう。
·
標準のシステム全体のアクティベーション ディレクトリを指定します
サービス ファイルを検索する必要があります。 このオプションのデフォルトは、
/usr/share/dbus-1/system-services。
のこのオプションはシステムごとのバス デーモンにのみ関連します
/usr/share/dbus-1/system.conf で定義されています。 他の設定ファイルに置くと、
おそらくナンセンスでしょう。
·
システム デーモンを起動するために使用される setuid ヘルパーを指定します。
代替ユーザー。 通常、これは dbus-daemon-launch-helper 実行可能ファイルである必要があります。
libexec にあります。
のこのオプションは、で定義されたシステムごとのバス デーモンにのみ関連します。
/usr/share/dbus-1/system.conf。 他の設定ファイルに置くと、おそらく
ナンセンスであろう。
·
リソース制限を確立します。 例えば:
64
512
name 属性は必須です。 使用可能な制限名は次のとおりです。
"max_incoming_bytes" : メッセージの合計サイズ (バイト単位)
単一の接続からの受信
"max_incoming_unix_fds" : メッセージの unix fd の総数
単一の接続からの受信
"max_outcoming_bytes" : メッセージの合計サイズ (バイト単位)
単一の接続のためにキューに入れられました
"max_outcoming_unix_fds" : メッセージの UNIX FDS の総数
単一の接続のためにキューに入れられました
"max_message_size" : 単一メッセージの最大サイズ
バイト
"max_message_unix_fds" : 単一メッセージの最大 unix fds
"service_start_timeout" : までのミリ秒 (XNUMX 分の XNUMX)
開始されたサービスは接続する必要があります
"auth_timeout" : ミリ秒 (XNUMX 分の XNUMX)
接続が与えられます
認証
"pending_fd_timeout" : ミリ秒 (XNUMX 分の XNUMX)
fd は送信されるように与えられます。
切断する前に dbus-daemon
接続
"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" : ミリ秒 (XNUMX 分の XNUMX)
メソッド呼び出しがタイムアウトになるまで
受信/送信キューの最大サイズにより、XNUMX バイトが残っている場合に新しいメッセージをキューに入れることができます。
最大値を下回ります。 したがって、実際には max_message_size だけ最大値を超えることができます。
max_completed_connections を max_connections_per_user で割った値は、
上のすべての接続を使い果たすことで、他のすべてのユーザーが連携してサービス妨害を行うことができます。
システム全体のバス。
通常、制限はシステム全体のバスにのみ関係し、ユーザー セッション バスには関係ありません。
·
の要素は、特定のセットに適用されるセキュリティ ポリシーを定義します。
バスへの接続。 ポリシーは次のもので構成されますと要素。 ポリシーは
通常はシステム全体のバスで使用されます。 許可するという点でファイアウォールに似ています。
予想されるトラフィックを防止し、予期しないトラフィックを防ぎます。
現在、システム バスには、メソッド呼び出しの送信と所有のためのデフォルト拒否ポリシーがあります。
バスの名前。 他のすべて、特に応答メッセージ、受信チェック、およびシグナルには、
デフォルトの許可ポリシー。
一般に、システム サービスは、
独自のプロセスを使用し、単一のバス名を提供します。 次に、必要なのは
プロセスにバス名を要求させるための「独自の」パーミッションのルール、および
「send_destination」ルールは、一部またはすべての UID からサービスへのトラフィックを許可します。
の要素には、次の XNUMX つの属性のいずれかが含まれます。
context="(デフォルト|必須)"
at_console="(true|false)"
user="ユーザー名またはユーザーID"
group="グループ名またはGID"
ポリシーは次のように接続に適用されます。
- すべての context="default" ポリシーが適用されます
- すべての group="接続のユーザーのグループ" ポリシーが適用されます
未定義の順序で
- すべての user="接続の認証ユーザー" ポリシーが適用されます
未定義の順序で
- すべての at_console="true" ポリシーが適用されます
- すべての at_console="false" ポリシーが適用されます
- すべての context="mandatory" ポリシーが適用されます
ポリシーが重複する場合、後で適用されたポリシーは以前に適用されたポリシーをオーバーライドします。
同じユーザー/グループ/コンテキストを持つ複数のポリシーは、次の順序で適用されます。
構成ファイル。
あ要素は以下に表示されます要素であり、一部のアクションを禁止します。 の
要素により以前の例外が発生しますステートメントと同様に機能しますしかし
逆の意味で。
これらの要素の可能な属性は次のとおりです。
send_interface="インターフェース名"
send_member="メソッドまたはシグナル名"
send_error="エラー名"
送信先 = "名前"
send_type="メソッドコール" | "メソッド_リターン" | 「信号」 | "エラー"
send_path="/パス/名前"
accept_interface="インターフェース名"
accept_member="メソッドまたはシグナル名"
accept_error="エラー名"
受信送信者 = "名前"
受信タイプ = "メソッド呼び出し" | "メソッド_リターン" | 「信号」 | "エラー"
accept_path="/パス/名前"
send_requested_reply="true" | "間違い"
accept_requested_reply="true" | "間違い"
盗聴 = "true" | "間違い"
自分の = "名前"
own_prefix="名前"
ユーザー = "ユーザー名"
グループ = "グループ名"
例:
の要素の属性によって、拒否が特定のアクションに「一致」するかどうかが決まります。
一致する場合、アクションは拒否されます (構成ファイル内の後のルールで許可されていない限り)。
send_destination ルールと accept_sender ルールは、メッセージが次の宛先に送信されないことを意味します。
指定された名前の*所有者*から受け取ったものですが、*その名前*に送信できないわけではありません。
つまり、接続がサービス A、B、C を所有しており、A への送信が拒否された場合、B への送信は行われません。
または C も機能しません。
他の send_* 属性と accept_* 属性は、純粋にテキスト/値による一致です。
メッセージヘッダーの指定されたフィールド。
「盗聴」は、アプリケーションが明示的に送信されたメッセージを受信したときに発生します。
アプリケーションが所有していない名前に宛てられたメッセージ、またはそのようなメッセージに対する応答です。
したがって、盗聴はサービスに宛てられたメッセージと返信されるメッセージにのみ適用されます。
このようなメッセージ (つまり、シグナルには適用されません)。
ために, eavesdrop="true" は、盗聴している場合でもルールが一致することを示します。
eavesdrop="false" がデフォルトであり、ルールがメッセージの送信のみを許可することを意味します。
指定された受信者。 ために、eavesdrop="true" はルールが一致することを示します。
盗聴時のみ。 eavesdrop="false" がデフォルトです。 こちらもですが、
これは、盗聴していない場合でも、ルールが常に適用されることを意味します。 盗聴属性
送信ルールと受信ルール (send_* および accept_* 属性を含む) とのみ組み合わせることができます。
[send|receive]_requested_reply 属性は、eavesdrop 属性と同様に機能します。
それは、 また期待される応答と一致します (に対応します)
以前のメソッド呼び出しメッセージ)。 この属性は応答メッセージに対してのみ意味を持ちます。
(エラーとメソッドの戻り)、他のメッセージ タイプでは無視されます。
ために[send|receive]_requested_reply="true" がデフォルトであり、それのみを示します。
要求された応答はルールによって許可されます。 [send|receive]_requested_reply="false" の意味
このルールでは、たとえ予期せぬものであっても、あらゆる応答が許可されているということです。
ために, [send|receive]_requested_reply="false" がデフォルトですが、
ルールは、応答が要求されていない場合にのみ一致します。 [送信|受信]_requested_reply="true"
保留中の応答状態に関係なく、ルールが常に適用されることを示します。
ユーザーおよびグループの拒否は、指定されたユーザーまたはグループがメッセージに接続できないことを意味します
バス。
「名前」、「ユーザー名」、「グループ名」などは、文字「*」で置き換えることができます。
"どれでも。" 「foo.bar.*」のような複雑なグロブは、作業が困難になるため、現時点では許可されていません。
とにかくずさんなセキュリティを実装し、おそらくそれを奨励します。
「ab」という名前、または最初にその名前が含まれる任意の名前を所有できるようになります。
ドットで区切られた要素は「ab」です。特に、「abc」または「abcd」は所有できますが、所有することはできません。
「a.bc」または「ac」。 これは、Telepathy や ReserveDevice などのサービスが
などのよく知られた名前のサブツリーの意味
org.freedesktop.Telepathy.ConnectionManager.(何でも) および
org.freedesktop.ReserveDevice1.(何でも)。
内部のユーザーまたはグループを拒否することは意味がありません。 ユーザーまたはグループの場合。
ユーザー/グループの拒否は、context="default" または context="mandatory" ポリシー内でのみ行うことができます。
独身者ルールでは、send_destination や
send_interface と send_type。 この場合、拒否は両方の属性が満たされている場合にのみ適用されます。
拒否されたメッセージと一致します。 例えば
send_destination="foo.blah"/> は、指定されたインターフェイスと指定されたインターフェイスを持つメッセージを拒否します。
バスの名前。 OR効果を得るには、複数を指定しますルール。
同じルールに send_ 属性と accept_ 属性の両方を含めることはできません。
「メッセージを送信できるか」と「受信できるか」は別々に評価されます。
send_interface/receive_interface には注意してください。メッセージ内のインターフェイス フィールドは
はオプションです。 特に指定しないでください! この意志
すべてのサービスに対してインターフェイスなしメッセージがブロックされますが、これはほぼ確実にブロックされません。
あなたが意図したもの。 常に次の形式のルールを使用してください。
send_destination="org.foo.Service"/>
·
の要素には、Security Enhanced Linux に関連する設定が含まれます。 さらに詳しく
を参照してください。
·
アン要素は下に表示されます要素を作成し、マッピングを作成します。 たった今
XNUMX 種類の関連付けのみが可能です。
これは、接続が「org.freedesktop.Foobar」という名前の所有を要求した場合、
ソース コンテキストは接続のコンテキストとなり、ターゲット コンテキストは
"foo_t" - 以下の SELinux の簡単な説明を参照してください。
ここでのコンテキストは、名前をリクエストするときのターゲット コンテキストであり、名前のコンテキストではないことに注意してください。
名前を所有する接続。
現在のところ、名前を所有するためのデフォルトを設定する方法はありません。この構文を追加すると、
次のようになります。
これが役立つ理由を見つけた場合は、開発者に知らせてください。 現時点ではデフォルトでは
バス自体のセキュリティ コンテキストになります。
XNUMXつなら要素は同じ名前を指定します。要素は後の方に表示されます。
設定ファイルが使用されます。
·
の要素は、バス上で AppArmor メディエーションを構成するために使用されます。 含まれる可能性があります
メディエーション モードを指定する XNUMX つの属性:
デフォルトのモードは「有効」です。 「有効」モードでは、次の場合に AppArmor メディエーションが実行されます。
AppArmor のサポートはカーネルで利用できます。 利用できない場合、dbus-daemon は
が開始されますが、AppArmor メディエーションは発生しません。 「無効」モードでは、AppArmor メディエーションは
無効。 「必須」モードでは、AppArmor サポートが有効な場合、AppArmor メディエーションが有効になります。
利用可能でない場合、dbus-daemon は起動を拒否します。
バスの AppArmor メディエーション モードは、バスの開始後に変更することはできません。 変更中
構成ファイル内のモードとデーモンへの SIGHUP シグナルの送信は効果がありません
調停モードで。
セリナックス
詳細はこちら: http://www.nsa.gov/selinux/ SELinux の詳細については、こちらをご覧ください。 役に立ついくつかの抜粋:
システム内のすべてのサブジェクト (プロセス) とオブジェクト (ファイル、ソケット、IPC オブジェクトなど) は、
セキュリティ コンテキストと呼ばれるセキュリティ属性のコレクションが割り当てられます。 セキュリティ
context には、特定のサブジェクトに関連付けられたすべてのセキュリティ属性が含まれています。
セキュリティ ポリシーに関連するオブジェクト。
セキュリティ コンテキストをより適切にカプセル化して効率を高めるために、
SELinux のポリシー適用コードは通常、セキュリティ識別子 (SID) を処理します。
セキュリティコンテキストよりも。 SID は、セキュリティ サーバーによってマッピングされる整数です。
実行時のセキュリティコンテキスト。
セキュリティに関する決定が必要な場合、ポリシー適用コードは SID のペアを渡します。
(通常はサブジェクトの SID とオブジェクトの SID ですが、場合によってはサブジェクトのペア
SID またはオブジェクト SID のペア)、およびオブジェクト セキュリティ クラスをセキュリティ サーバーに送信します。 の
オブジェクト セキュリティ クラスは、オブジェクトの種類 (プロセス、通常のファイル、ファイルなど) を示します。
ディレクトリ、TCP ソケットなど。
アクセスの決定は、特定の SID ペアに対してアクセス許可が付与されるかどうかを指定します。
そしてクラス。 各オブジェクト クラスには、制御するために定義された関連するアクセス許可のセットがあります。
そのクラスのオブジェクトに対する操作。
D-Bus は、SELinux セキュリティ チェックを XNUMX か所で実行します。
まず、メッセージがある接続から別の接続にルーティングされるたびに、バスは
デーモンは、最初の接続のセキュリティ コンテキストをソースとしてアクセス許可をチェックします。
ターゲットとしての XNUMX 番目の接続のセキュリティ コンテキスト、オブジェクト クラス「dbus」および要求
権限「send_msg」。
接続にセキュリティ コンテキストが使用できない場合 (UNIX ドメインを使用する場合は不可能)
ソケット) の場合、使用されるターゲット コンテキストはバス デーモン自体のコンテキストになります。 がある
UNIX ドメインのみを想定しているため、現時点ではこのデフォルトを変更する方法はありません。
ソケットはシステム全体のバスに接続するために使用されます。 これが変更された場合は、おそらく追加するでしょう
デフォルトの接続コンテキストを設定する方法。
第 XNUMX に、接続が名前の所有を要求するたびに、バス デーモンがアクセス許可をチェックします。
接続のセキュリティ コンテキストをソースとして使用し、セキュリティ コンテキストを指定します。
ターゲットとしての構成ファイル内の名前、オブジェクト クラス「dbus」、および要求された権限
「acquire_svc」。
バス名のセキュリティ コンテキストは、 要素の説明
このドキュメントの前半で説明します。 名前にセキュリティ コンテキストが関連付けられていない場合、
構成ファイルを変更すると、バス デーモン自体のセキュリティ コンテキストが使用されます。
アパマー
AppArmor 制限コンテキストは、アプリケーションがバスに接続するときに保存されます。 の
閉じ込めコンテキストは、ラベルと閉じ込めモードで構成されます。 セキュリティに関する決定が下される場合
が必要な場合、デーモンは制限コンテキストを使用して AppArmor ポリシーをクエリし、
アクションを許可するか拒否するか、およびアクションを監査する必要があるかを決定します。
デーモンは、AppArmor セキュリティ チェックを XNUMX か所で実行します。
まず、メッセージがある接続から別の接続にルーティングされるたびに、バスは
デーモンは、最初の接続のラベルをソースとして使用して権限をチェックします。
および/またはターゲットとしての XNUMX 番目の接続の接続名とバス名、
パス名、インターフェース名、メンバー名。 応答メッセージ (method_return など)
およびエラー メッセージは、次のメッセージに対する応答である場合、暗黙的に許可されます。
すでに許可されています。
第 XNUMX に、接続が名前の所有を要求するたびに、バス デーモンがアクセス許可をチェックします。
ソースとして接続のラベル、ターゲットとして要求された名前、および
バスの名前。
第三に、接続が盗聴を試みるたびに、バス デーモンがアクセス許可をチェックします。
ソースとしての接続のラベルとバス名を使用します。
バス メディエーションの AppArmor ルールは、バス構成ファイルには保存されません。 彼らです
アプリケーションの AppArmor プロファイルに保存されます。 参照してください apparmor.d(5) のガイドをご参照ください。
デバッグ
メッセージがどこに送信されているのか、またはなぜ受信できないのかを把握しようとしている場合
メッセージが表示された場合は、いくつか試してみることができます。
システム バスは厳重にロックダウンされていることに注意してください。
セキュリティ ポリシー ファイルを使用してメッセージの通過を許可しても、機能しません。 セッションバスの場合、
これは心配ありません。
バス内で何が起こっているかを把握する最も簡単な方法は、 dbus モニター
このプログラムは D-Bus パッケージに付属しています。 テストメッセージを送信することもできます
dbus-送信。 これらのプログラムには独自のマニュアル ページがあります。
デーモン自体が何をしているのかを知りたい場合は、別のデーモンを実行することを検討してください。
テストするデーモンのコピー。 これにより、デーモンを
実際のセッションとシステムを台無しにすることなく、デバッガを実行したり、詳細な出力で実行したりできます
デーモン。
たとえば、デーモンの別のテスト コピーを実行するには、ターミナルを開いて次のように入力します。
DBUS_VERBOSE=1 dbus-daemon --session --print-address
テスト デーモンのアドレスは、デーモンの起動時に出力されます。 必要となるのは、
このアドレスをコピーして貼り付け、DBUS_SESSION_BUS_ADDRESS の値として使用します。
テストするアプリケーションを起動するときに環境変数を使用します。 これにより、
これらのアプリケーションは、DBUS_SESSION_BUS_ADDRESS の代わりにテスト バスに接続します。
実際のセッションバス。
D-Bus のコピーが冗長でコンパイルされていない限り、DBUS_VERBOSE=1 は効果がありません。
モードが有効になりました。 パフォーマンスに影響を与えるため、実稼働ビルドではこれはお勧めできません。 あなた
コピーがデバッグを念頭に置いて構築されていない場合は、D-Bus を再構築する必要がある場合があります。 (DBUS_VERBOSE
D-Bus ライブラリ、つまり D-Bus を使用するアプリケーションにも影響します。 見ると役に立つかもしれません
クライアント側とデーモンの両方で詳細な出力が表示されます。)
さらに凝りたい場合は、テスト バスのカスタム バス構成を作成できます (「
session.conf ファイルと system.conf ファイル。これらのファイルは、
例)。 これにより、.service ファイルに別のディレクトリを指定できるようになります。
例。
onworks.net サービスを使用してオンラインで dbus-daemon を使用する