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

第二次调用检查或更改正在运行的进程和核心文件的特权状态。

第三次调用列出所定义的特权以及关于指定的特权或特权集规范的信息。

选项

支持以下选项:

–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

根据 spec(以 [AEILP][+-=]privsetspec 格式指定的内容,不包含空格)修改进程的特权集,其中:

AEILP

表示一个或多个指示要更改的特权集的字母。这些字母不区分大小写,例如,aA 都指示所有特权集。

有关特权集合的单一字母缩写的定义,请参见 privileges(7)

+-=

表示修饰符,分别用于在 privsetspec 中指定的特权集中添加 (+) 或删除 (-) 所列出的特权,或者将所列出的特权赋予 (=) 该特权集。

privsetspec

表示以逗号分隔的特权集指定内容(priv1priv2,等等),如 priv_str_to_set(3C) 中所述。

可以使用多个 –s 选项修改同一特权集,前提是只指定了对单个特权集的赋值,或者指定了任意数目的添加和删除。也就是说,针对特权集的赋值与添加或删除是互斥的。

–q

测试特权是否位于有效集中以及设置还是未设置标志。所有测试都完成时程序将成功退出。

–r rule

安装扩展策略。有关更多信息,请参见 privileges(7) 手册页。

可以指定多个规则。新规则将添加到现有策略中。要替换现有策略,请先使用 –X 将其删除,然后使用 –r 添加新策略。

–S

短.为特权集报告尽可能短的输出字符串。缺省设置是可移植输出。有关更多信息,请参见 priv_str_to_set(3C) 手册页。

–X

已过时。与 –f –X 相同。

–v

详细模式。使用特权名称报告特权集。

–?
–-help

输出用法消息并立即退出。

用法

ppriv 实用程序检查进程和核心文件,并输出或更改其特权集。

ppriv 可以在启用或禁用特权调试的情况下执行命令,或者使用比调用进程时更少的特权运行命令。

执行子进程时,可修改的特权集只有 LI。只能从 LI 删除特权,因为 ppriv 是以 P=E=I 设置启动的。

还可使用 ppriv 从进程删除特权,或者将特权传递至其他进程。要控制某个进程,ppriv 实用程序的有效特权集必须是受控进程的 EIP 的超集。实用程序的限制特权集必须是目标的限制特权集的超集。如果目标的进程 uid 不匹配,则必须在实用程序的有效特权集合中声明 {PRIV_PROC_OWNER} 特权。如果受控进程具有值为0 的 uid,则可能存在更多限制。有关更多信息,请参见 privileges(7) 手册页。

示例

示例 1 获取当前 Shell 的进程特权

以下示例将获取当前 shell 的进程特权:

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

以下示例将从 shell 的可继承的有效特权集中删除一个特权。

example$ ppriv -s EI-proc_session $$

子进程仍可检查父 shell,但不能再影响父进程,因为父进程在其允许特权集中的特权比 ppriv 子进程多:

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

操作成功。

非零

出现错误。

文件

/proc/*

进程文件

/etc/name_to_sysnum

系统调用名称到系统调用号的映射

属性

有关下列属性的说明,请参见 attributes(7)

属性类型
属性值
可用性
system/core-os
接口稳定性
请参见下文

调用为 Committed(已确定)。输出是 "Uncommitted"(未确定)。

另请参见

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.