ppriv - プロセス特権セットおよび属性の検査または変更
/usr/bin/ppriv -e [-f { +-}{ADKMPRSTUX}] [-s spec] [-r rule] command [arg]...
/usr/bin/ppriv [-vn] [ -f {+-}{ADKMPRSTUX}] [-S] [-s spec] [-r rule][pid | core]...
/usr/bin/ppriv -l [-vn] [ privilege-specification | extended-policy]...
/usr/bin/ppriv -q [-f {+-}{ADKMPRSTUX}[privilege-specification]
ppriv コマンドの最初の呼び出しでは、コマンド行の引数に従って変更された特権セットとフラグが指定された command が実行されます。
2 番目の呼び出しでは、実行中のプロセスとコアファイルの特権の状態を検査または変更します。
3 番目の呼び出しでは、定義されている特権および指定された特権または特権セットの指定に関する情報を一覧表示します。
サポートしているオプションは、次のとおりです。
廃止。–f +D と同じです。
残りの引数をコマンド行として解釈し、指定された特権の属性およびセットでコマンド行を実行します。
指定されたプロセスまたはコマンドのプロセスフラグを設定または設定解除します。詳細は、setpflags(2) のマニュアルページを参照してください。
PRIV_DEBUG
NET_MAC_AWARE、NET_MAC_AWARE_INHERIT
PRIV_PFEXEC
PRIV_PFEXEC_AUTH
PRIV_TPD_KILLABLE
PRIV_PROC_TPD_RESET
PRIV_PROC_SENSITIVE
警告: このフラグの設定を解除すると、潜在的な機密データが、所有権にかかわらず、proc_owner 特権を持つほかのプロセスに公開されてしまう可能性があります。
PRIV_PROC_TPD
PRIV_TPD_UNSAFE
PRIV_XPOLICY
現在定義されている特権をすべて stdout に書き込みます。
廃止。–f +M と同じです。
ポート番号とユーザーを数字として表示します。通常、ppriv は、ポート番号とユーザーをシンボルとして表示します。このオプションは、拡張ポリシーを表示する場合にのみ適用できます。
廃止。–f –D と同じです。
スペース文字を含まない [AEILP][+-=] privsetspec という形式の指定である spec に従ってプロセスの特権セットを変更します。
変更する特権セットを示す 1 文字以上の英字を示します。これらは大文字と小文字の区別がなく、たとえば、a または A のいずれもすべての特権セットを示します。
特権セットの単一文字省略名の定義については、privileges(7) を参照してください。
リストされた特権を privsetspec で指定されたセットに、それぞれ追加 (+)、削除 (-)、または割り当て (=) する修飾子を示します。
priv_str_to_set(3C) で説明されている、コンマで区切られた特権セットの指定 (priv1、priv2 など) を示します。
個々のセットにそれぞれ 1 つの割り当てを行うか、任意の数の追加および削除を行うかのいずれかであれば、同じセットを複数の –s オプションで変更することは可能です。つまり、単一のセットに対する割り当てと、追加または削除は相互に排他的です。
特権が実効セット内にあるかどうか、およびフラグが設定済みか未設定かをテストします。このプログラムは、すべてのテストが完了すると正常に終了します。
拡張ポリシーをインストールします。詳細は、privileges(7) のマニュアルページを参照してください。
複数のルールを指定できます。新しいルールは、既存のポリシーに追加されます。既存のポリシーを置き換えるには、まず –X を使用してそのポリシーを削除し、次に –r を使用して新しいポリシーを追加します。
短い。可能なかぎり短い出力文字列でセットを報告します。デフォルトは移植性のある出力形式です。詳細は、priv_str_to_set(3C) のマニュアルページを参照してください。
廃止。–f –X と同じです。
冗長。特権名を使用して特権セットを報告します。
ppriv ユーティリティーは、プロセスとコアファイルを検査し、それらの特権セットを出力または変更します。
ppriv は、特権のデバッグを有効または無効にして、あるいは呼び出すプロセスよりも少ない特権でコマンドを実行できます。
サブプロセスを実行する場合、変更できるセットは L と I のみです。ppriv が P=E=I で起動された場合、特権を削除できるのは L と I からのみです。
ppriv は、プロセスから特権を削除する場合、または別のプロセスに特権を委譲する場合にも使用できます。プロセスを制御するには、ppriv ユーティリティーの実効セットは、制御されるプロセスの E、I、および P の上位集合である必要があります。ユーティリティーの制限セットは、ターゲットの制限セットの上位集合である必要があります。ターゲットプロセスのユーザー ID が一致しない場合は、ユーティリティーの実効セットで {PRIV_PROC_OWNER} 特権を表明する必要があります。制御されるプロセスが値 0 のユーザー ID を持つ場合、さらに制限が存在する可能性があります。詳細は、privileges(7) のマニュアルページを参照してください。
次の例では、現在のシェルに対するプロセスの特権を取得します。
example$ ppriv $$ 387: -sh flags = <none> E: basic I: basic P: basic L: all使用例 2 シェルの継承可能な実効セットからの特権の削除
次の例では、シェルの継承可能な実効セットから特権を削除します。
example$ ppriv -s EI-proc_session $$
サブプロセスはまだ親シェルを検査できますが、親に影響を及ぼすことはできません。親は ppriv の子プロセスよりも多い特権を Permitted セットに持っているためです。
example$ truss -p $$ truss: permission denied: 387 example$ ppriv $$ 387: -sh flags = <none> E: basic,!proc_session I: basic,!proc_session P: basic L: all使用例 3 特権のデバッグを使用したプロセスの実行
次の例では、特権のデバッグを有効にしてプロセスを実行します。
example$ ppriv -e -f +D cat /etc/shadow cat[418]: missing privilege “file_dac_read” (euid = 21782), needed at ufs_access+0x3c cat: cannot open /etc/shadow
特権のデバッグのエラーメッセージは、現在のプロセスの制御端末に送信されます。needed at アドレス指定は、カーネル実装のアーティファクトであり、ソフトウェアの更新後にいつでも変更できます。
システムコール番号は、/etc/name_to_sysnum を使用するとシステムコールにマップできます。
使用例 4 現在のゾーンで使用可能な特権の一覧表示次の例では、現在のゾーンで使用可能な特権を一覧表示します (zones(7) を参照)。大域ゾーンで実行すると、定義されているすべての特権が一覧表示されます。
example$ ppriv -l zone ... listing of all privileges elided ...使用例 5 特権に対応したプロセスの検査
次の例では、特権に対応したプロセスを検査します。
example$ ppriv -S ‘pgrep rpcbind‘ 928: /usr/sbin/rpcbind flags = PRIV_AWARE E: net_privaddr,proc_fork,sys_nfs I: none P: net_privaddr,proc_fork,sys_nfs L: none
フラグの説明については、setpflags(2) を参照してください。
使用例 6 拡張ポリシーの下でのプロセスの実行次の例では、拡張ポリシーの下でプロセスを実行します。
example$ ppriv -r '{file_write}:/home/casper/.mozilla/*' \ -r '{file_write}:/tmp/*,{proc_exec}:/usr/*' -e firefox
privileges(7) を参照してください。
使用例 7 起動されているプロセスの検査次の例では、例 6 で起動されたプロセスを検査します。
example$ ppriv 101272 101272: /usr/lib/firefox/firefox-bin flags = PRIV_XPOLICY Extended policies: {file_write}:/home/casper/.mozilla/* {file_write}:/tmp/* {proc_exec}:/usr/* E: basic,!file_write,!proc_exec I: basic,!file_write,!proc_exec P: basic,!file_write,!proc_exec L: all使用例 8 フラグおよび特権のテスト。
次の例は、フラグおよび特権をテストします。
example$ if ppriv -q -f +D file_read; then echo Privilege debugging is enabled echo and file_read privilege detected
次の終了ステータスが返されます。
正常終了。
エラーが発生しました。
プロセスファイル
システムコール名と番号のマッピング
属性についての詳細は、マニュアルページの attributes(7) を参照してください。
|
呼び出しは「確実」です。出力は「不確実」です。
gcore(1), truss(1), setpflags(2), priv_str_to_set(3C), proc(5), attributes(7), privileges(7), tpd(7), zones(7)