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。
第二次调用检查或更改正在运行的进程和核心文件的特权状态。
第三次调用列出所定义的特权以及关于指定的特权或特权集规范的信息。
支持以下选项:
已过时。与 –f +D 相同。
将其余参数解释为一个命令行,并使用指定的特权属性和特权集运行该命令行。
To set or unset the process flags of the processes or the command supplied.有关更多信息,请参见 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 将端口号和用户显示为符号。此选项仅在显示扩展策略时适用。
已过时。Same as –f -D.
已过时。Same as –f +P.
根据 spec(以 [AEILP][+-=]privsetspec 格式指定的内容,不包含空格)修改进程的特权集,其中:
表示一个或多个指示要更改的特权集的字母。这些字母不区分大小写,例如,a 或 A 都指示所有特权集。
有关特权集合的单一字母缩写的定义,请参见 privileges(7)。
表示修饰符,分别用于在 privsetspec 中指定的特权集中添加 (+) 或删除 (-) 所列出的特权,或者将所列出的特权赋予 (=) 该特权集。
表示以逗号分隔的特权集指定内容(priv1、priv2,等等),如 priv_str_to_set(3C) 中所述。
可以使用多个 –s 选项修改同一特权集,前提是只指定了对单个特权集的赋值,或者指定了任意数目的添加和删除。也就是说,针对特权集的赋值与添加或删除是互斥的。
测试特权是否位于有效集中以及设置还是未设置标志。所有测试都完成时程序将成功退出。
安装扩展策略。有关更多信息,请参见 privileges(7) 手册页。
可以指定多个规则。新规则将添加到现有策略中。要替换现有策略,请先使用 –X 将其删除,然后使用 –r 添加新策略。
短.为特权集报告尽可能短的输出字符串。缺省设置是可移植输出。有关更多信息,请参见 priv_str_to_set(3C) 手册页。
已过时。与 –f –X 相同。
详细模式。使用特权名称报告特权集。
输出用法消息并立即退出。
ppriv 实用程序检查进程和核心文件,并输出或更改其特权集。
ppriv 可以在启用或禁用特权调试的情况下执行命令,或者使用比调用进程时更少的特权运行命令。
执行子进程时,可修改的特权集只有 L 和 I。只能从 L 和 I 删除特权,因为 ppriv 是以 P=E=I 设置启动的。
还可使用 ppriv 从进程删除特权,或者将特权传递至其他进程。要控制某个进程,ppriv 实用程序的有效特权集必须是受控进程的 E、I 和 P 的超集。实用程序的限制特权集必须是目标的限制特权集的超集。如果目标的进程 uid 不匹配,则必须在实用程序的有效特权集合中声明 {PRIV_PROC_OWNER} 特权。如果受控进程具有值为0 的 uid,则可能存在更多限制。有关更多信息,请参见 privileges(7) 手册页。
以下示例将获取当前 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
将返回以下退出值:
操作成功。
出现错误。
进程文件
系统调用名称到系统调用号的映射
有关下列属性的说明,请参见 attributes(7):
|
调用为 Committed(已确定)。输出是 "Uncommitted"(未确定)。
gcore(1), truss(1), setpflags(2), priv_str_to_set(3C), proc(5), attributes(7), privileges(7), tpd(7), zones(7)
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.