Go to main content

マニュアルページ セクション 1: ユーザーコマンド

印刷ビューの終了

更新: 2022年7月27日
 
 

ppriv(1)

名前

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 番目の呼び出しでは、定義されている特権および指定された特権または特権セットの指定に関する情報を一覧表示します。

オプション

サポートしているオプションは、次のとおりです。

–D

廃止。–f +D と同じです。

–e

残りの引数をコマンド行として解釈し、指定された特権の属性およびセットでコマンド行を実行します。

–f {+-} {ADKMPRSTUX}

To set or unset the process flags of the processes or the command supplied.詳細は、setpflags(2) のマニュアルページを参照してください。

D

PRIV_DEBUG

M

NET_MAC_AWARENET_MAC_AWARE_INHERIT

P

PRIV_PFEXEC

A

PRIV_PFEXEC_AUTH

K

PRIV_TPD_KILLABLE

R

PRIV_PROC_TPD_RESET

S

PRIV_PROC_SENSITIVE

警告: このフラグの設定を解除すると、潜在的な機密データが、所有権にかかわらず、proc_owner 特権を持つほかのプロセスに公開されてしまう可能性があります。

T

PRIV_PROC_TPD

U

PRIV_TPD_UNSAFE

X

PRIV_XPOLICY

–l

現在定義されている特権をすべて stdout に書き込みます。

–M

廃止。–f +M と同じです。

–n

ポート番号とユーザーを数字として表示します。通常、ppriv は、ポート番号とユーザーをシンボルとして表示します。このオプションは、拡張ポリシーを表示する場合にのみ適用できます。

–N

廃止。Same as –f -D.

–P

廃止。Same as –f +P.

–s spec

スペース文字を含まない [AEILP][+-=]privsetspec という形式の指定である spec に従ってプロセスの特権セットを変更します。

AEILP

変更する特権セットを示す 1 文字以上の英字を示します。これらは大文字と小文字の区別がなく、たとえば、a または A のいずれもすべての特権セットを示します。

特権セットの単一文字省略名の定義については、privileges(7) を参照してください。

+-=

リストされた特権を privsetspec で指定されたセットに、それぞれ追加 (+)、削除 (-)、または割り当て (=) する修飾子を示します。

privsetspec

priv_str_to_set(3C) で説明されている、コンマで区切られた特権セットの指定 (priv1priv2 など) を示します。

個々のセットにそれぞれ 1 つの割り当てを行うか、任意の数の追加および削除を行うかのいずれかであれば、同じセットを複数の –s オプションで変更することは可能です。つまり、単一のセットに対する割り当てと、追加または削除は相互に排他的です。

–q

特権が実効セット内にあるかどうか、およびフラグが設定済みか未設定かをテストします。このプログラムは、すべてのテストが完了すると正常に終了します。

–r rule

拡張ポリシーをインストールします。詳細は、privileges(7) のマニュアルページを参照してください。

複数のルールを指定できます。新しいルールは、既存のポリシーに追加されます。既存のポリシーを置き換えるには、まず –X を使用してそのポリシーを削除し、次に –r を使用して新しいポリシーを追加します。

–S

短い。可能なかぎり短い出力文字列でセットを報告します。デフォルトは移植性のある出力形式です。詳細は、priv_str_to_set(3C) のマニュアルページを参照してください。

–X

廃止。–f –X と同じです。

–v

冗長。特権名を使用して特権セットを報告します。

–?
–-help

使用法に関するメッセージを出力したあと、すぐに終了します。

使用法

ppriv ユーティリティーは、プロセスとコアファイルを検査し、それらの特権セットを出力または変更します。

ppriv は、特権のデバッグを有効または無効にして、あるいは呼び出すプロセスよりも少ない特権でコマンドを実行できます。

サブプロセスを実行する場合、変更できるセットは LI のみです。pprivP=E=I で起動された場合、特権を削除できるのは LI からのみです。

ppriv は、プロセスから特権を削除する場合、または別のプロセスに特権を委譲する場合にも使用できます。プロセスを制御するには、ppriv ユーティリティーの実効セットは、制御されるプロセスの EI、および P の上位集合である必要があります。ユーティリティーの制限セットは、ターゲットの制限セットの上位集合である必要があります。ターゲットプロセスのユーザー ID が一致しない場合は、ユーティリティーの実効セットで {PRIV_PROC_OWNER} 特権を表明する必要があります。制御されるプロセスが値 0 のユーザー ID を持つ場合、さらに制限が存在する可能性があります。詳細は、privileges(7) のマニュアルページを参照してください。

使用例 1 現在のシェルに対するプロセスの特権の取得

次の例では、現在のシェルに対するプロセスの特権を取得します。

example$ ppriv $$
387:   -sh
flags = <none>
         E: basic
         I: basic
         P: basic
         L: all
使用例 2 Removing a Privilege from the Inheritable and Effective Sets

次の例では、シェルの継承可能な実効セットから特権を削除します。

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,
 syscall = "openat") for "/etc/shadow" at zfs_zaccess+0x284
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 フラグおよび特権のテスト。

次の例は、フラグおよび特権をテストします。

if ppriv -q -f +D file_read; then
        echo Privilege debugging is enabled
        echo and file_read privilege detected
fi

終了ステータス

次の終了ステータスが返されます。

0

正常終了。

0 以外

エラーが発生しました。

ファイル

/proc/*

プロセスファイル

/etc/name_to_sysnum

システムコール名と番号のマッピング

属性

属性についての詳細は、マニュアルページの attributes(7) を参照してください。

属性タイプ
属性値
使用条件
system/core-os
インタフェースの安定性
下記を参照

呼び出しは「確実」です。出力は「不確実」です。

関連項目

gcore(1), truss(1), setpflags(2), priv_str_to_set(3C), proc(5), attributes(7), privileges(7), tpd(7), zones(7)

History

The K and R flags for the –f option were added in Oracle Solaris 11.4.0.

The S flag for the –f option was added in Oracle Solaris 11.3.20.

The –f and –q options, and the A, D, M, P, T, U, and X flags for the –f option, were added in Oracle Solaris 11.2.0.The –D, –M, –N, –P, and –X options were declared obsolete at the same time.

The –n, –r, and –X options, and support for Extended Policies, were added in Oracle Solaris 11.1.0.

The –P option was added in Oracle Solaris 11.0.0.

The –M option was added in Solaris 10 11/06 (Update 3).

The ppriv command, with support for the –D, –e, –l, –N, –S, –s, and –v options, was added in Solaris 10 3/05.