この章では、システム管理者が特定のユーザーやプロセスに DTrace へのアクセス権を付与するために使用する権限について説明します。DTrace では、ユーザーレベルの関数、システムコール、カーネル関数など、あらゆる面に注目して、システムを把握できます。プログラムの状態を変更してしまうような、強力なアクションも用意されています。ユーザーに別のユーザーの個人用ファイルへのアクセス権を付与するのが不適切であるように、システム管理者は、すべてのユーザーにすべての DTrace 機能へのアクセス権を付与すべきではありません。デフォルトでは、DTrace を使用できるのはスーパーユーザーだけです。その他のユーザーに DTrace の制御付き使用を許可するときは、「最小権限」の機能を使用します。
Solaris の最小権限機能を利用して、管理者は、特定の Solaris ユーザーに特定の権限を付与できます。ユーザーのログイン時に権限を付与したい場合は、/etc/user_attr ファイルに次の 1 行を挿入します。
user-name::::defaultpriv=basic,privilege
実行中のプロセスに権限を追加したい場合は、ppriv(1) コマンドを使用します。
# ppriv -s A+privilege process-ID |
DTrace 機能へのユーザーアクセスは、dtrace_proc、dtrace_user、dtrace_kernel の 3 つの権限で制御します。権限によって、使用を許可される DTrace プロバイダ、アクション、および変数が異なります。また、各権限は、DTrace の特定の用途に対応しています。権限モードの詳細については、次節以降で説明します。システム管理者は、個々のユーザーのニーズと、個々の権限モードによる可視性やパフォーマンスへの影響を慎重に比較考慮する必要があります。ユーザーが DTrace の機能を使用するには、3 つの DTrace 権限のうち最低 1 つが必要です。
3 つの DTrace 権限のうちのどれかを持つユーザーは、dtrace プロバイダ (第 17 章dtrace プロバイダを参照) から提供されるプローブを有効にすることができます。また、次のアクションと変数を使用できます。
プロバイダ |
dtrace | ||
アクション |
exit |
printf |
tracemem |
discard |
speculate | ||
printa |
trace | ||
変数 |
args |
probemod |
this |
epid |
probename |
timestamp |
|
id |
probeprov |
vtimestamp |
|
probefunc |
self | ||
アドレス空間 |
なし |
|
|
dtrace_proc 権限が付与されている場合は、プロセスレベルのトレースで、fasttrap プロバイダを使用できます。次のアクションおよび変数も使用できます。
アクション |
copyin |
copyout |
stop |
copyinstr |
raise |
ustack |
|
変数 |
execname |
pid |
uregs |
アドレス空間 |
ユーザー |
|
|
この権限を持っていても、Solaris カーネルデータ構造や、ユーザーがアクセス権を持っていないプロセスに対しては、可視性が付与されません。
この権限を持っているユーザーは、自分が所有しているプロセス内に限って、プローブを作成したり有効にしたりできます。この権限に加えて proc_owner 権限を持っていれば、どのプロセス内でも、プローブを作成したり有効にしたりできます。dtrace_proc 権限は、ユーザープロセスのデバッグやパフォーマンス解析に関心のあるユーザー向けです。この権限は、新しいアプリケーションの開発者や、本稼働環境でアプリケーションのパフォーマンス改善を担当するエンジニアに最適です。
dtrace_proc 権限と proc_owner 権限の両方を持つユーザーは、任意のプロセスの任意の pid プローブを有効化することができます。ただし、プロセス内にプローブを作成するためには、そのプロセスの権限セットが、このユーザー自身の権限セットのサブセットである必要があります。詳細については、最小権限に関する文書を参照してください。
dtrace_proc 権限では、ユーザーがアクセス権を持っているプロセスのパフォーマンスだけに悪影響を及ぼす可能性がある DTrace アクセスが許可されます。計測されるプロセスは、システムリソースに対して、より多くの負荷をかけます。このため、システム全体のパフォーマンスにも多少影響を及ぼします。このように全体の負荷が増加する点を別にすると、この権限は、トレース対象外のプロセスのパフォーマンスに影響を及ぼすような計測機能を許可しません。この権限は、別のプロセスやカーネル自体に対する可視性をユーザーに与えないため、所有しているプロセスの内部動作を把握する必要があるすべてのユーザーに付与することを推奨します。
dtrace_user 権限では、制限付きで profile プロバイダと syscall プロバイダの使用を許可します。また、次のアクションと変数の使用を許可します。
プロバイダ |
プロファイル |
syscall |
fasttrap |
アクション |
copyin |
copyout |
stop |
copyinstr |
raise |
ustack |
|
変数 |
execname |
pid |
uregs |
アドレス空間 |
ユーザー |
|
|
dtrace_user 権限は、ユーザーがすでにアクセス権を持っているプロセスだけに対して可視性を提供します。カーネルの状態やアクティビティに対する可視性は提供しません。この権限を持つユーザーは、syscall プロバイダを有効にすることができます。しかし、有効化されたプローブは、このユーザーがアクセス権を持っているプロセス内でしか起動しません。profile プロバイダの場合も同様です。このプロバイダも有効にすることができますが、有効化されたプローブは、このユーザーがアクセス権を持っているプロセス内でしか起動しません。したがって、このプローブは Solaris カーネル内では絶対に起動しません。
この権限は、特定のプロセスだけに対して可視性を提供する一方で、システム全体のパフォーマンスに影響を及ぼすような計測機能の使用を許可します。syscall プロバイダは、すべてのプロセスのすべてのシステムコールのパフォーマンスに若干の影響を及ぼします。profile プロバイダは、リアルタイムタイマーと同様に、決まった時間間隔で実行され、システム全体のパフォーマンスに影響を及ぼします。これらのパフォーマンスの低減は、いずれも顕著なものではなく、システムの処理の進行に重大な影響を及ぼすことはありません。しかし、システム管理者は、この権限をユーザーに付与することの意味を十分に考慮する必要があります。syscall および profile プロバイダのパフォーマンスへの影響については、第 21 章syscall プロバイダと第 19 章profile プロバイダを参照してください。
dtrace_kernel 権限は、ユーザーが所有していないプロセス上の pid プロバイダと fasttrap プロバイダを除く、すべてのプロバイダの使用を許可します。この権限は、カーネル破壊アクション (breakpoint()、panic()、chill()) を除く、すべてのアクションおよび変数の使用も許可します。この権限は、カーネルとユーザーの状態すべてに対する可視性を提供します。dtrace_user 権限によって有効になる機能は、dtrace_kernel で有効になる機能の厳密なサブセットです。
プロバイダ |
制限範囲内ですべて | |
アクション |
すべて (破壊アクションを除く) | |
変数 |
すべて | |
アドレス空間 |
ユーザー |
カーネル |
すべての権限を持っているユーザーは、すべてのプロバイダとすべてのアクションを使用できます。使用できるアクションには、ほかのクラスのユーザーには許可されていない、カーネル破壊アクションも含まれています。
プロバイダ |
すべて | |
アクション |
すべて (破壊アクションを含む) | |
変数 |
すべて | |
アドレス空間 |
ユーザー |
カーネル |