跳过导航链接 | |
退出打印视图 | |
![]() |
手册页第 1 部分:用户命令 Oracle Solaris 11.1 Information Library (简体中文) |
- 检查或修改进程特权集和属性
/usr/bin/ppriv -e [-D | -N] [-M] [-s spec] [-X | -r rule] command [arg]...
/usr/bin/ppriv [-vn] [-S] [-D | -N] [-s spec] [-X | -r rule] [pid | core]...
/usr/bin/ppriv -l [-vn] [privilege-specification | extended-policy]...
ppriv 命令的第一次调用使用根据命令行上的参数修改的特权集和标志运行指定的 command。
第二次调用检查或更改正在运行的进程和核心文件的特权状态。
第三次调用列出所定义的特权以及关于指定的特权或特权集规范的信息。
支持以下选项:
为所提供的进程或命令打开特权调试。
将其余参数解释为一个命令行,并使用指定的特权属性和特权集运行该命令行。
在 stdout 上列出当前定义的所有特权。
当系统配置有 Trusted Extensions 时,此选项将启用 NET_MAC_AWARE 和 NET_MAC_AWARE_INHERIT 进程属性。
具有这些属性和 net_mac_aware 特权的进程可与较低级别的远程对等方进行通信。
将端口号和用户显示为数字。通常,ppriv 将端口号和用户显示为符号。此选项仅在显示扩展策略时适用。
为所提供的进程或命令关闭特权调试。
根据 spec(以 [AEILP][+-=]privsetspec 格式指定的内容,不包含空格)修改进程的特权集,其中:
表示一个或多个指示要更改的特权集的字母。这些字母不区分大小写,例如,a 或 A 都指示所有特权集。
有关特权集合的单一字母缩写的定义,请参见 privileges(5)。
表示修饰符,分别用于在 privsetspec 中指定的特权集中添加 (+) 或删除 (-) 所列出的特权,或者将所列出的特权赋予 (=) 该特权集。
表示以逗号分隔的特权集指定内容(priv1、priv2,等等),如 priv_str_to_set(3C)中所述。
可以使用多个 -s 选项修改同一特权集,前提是只指定了对单个特权集的赋值,或者指定了任意数目的添加和删除。也就是说,针对特权集的赋值与添加或删除是互斥的。
安装扩展策略。请参见 privileges(5)。
可以指定多个规则。新规则将添加到现有策略中。要替换现有策略,请先使用 -X 将其删除,然后使用 -r 添加新策略。
短. 为特权集报告尽可能短的输出字符串。缺省设置是可移植输出。请参见 priv_str_to_set(3C)。
禁用扩展策略。
详细模式。使用特权名称报告特权集。
ppriv 实用程序检查进程和核心文件,并输出或更改其特权集。
ppriv 可以在启用或禁用特权调试的情况下执行命令,或者使用比调用进程时更少的特权运行命令。
执行子进程时,可修改的特权集只有 L 和 I。只能从 L 和 I 删除特权,因为 ppriv 是以 P=E=I 设置启动的。
还可使用 ppriv 从进程删除特权,或者将特权传递至其他进程。要控制某个进程,ppriv 实用程序的有效特权集必须是受控进程的 E、I 和 P 的超集。实用程序的限制特权集必须是目标的限制特权集的超集。如果目标的进程 uid 不匹配,则必须在实用程序的有效特权集合中声明 {PRIV_PROC_OWNER} 特权。如果受控进程具有值为 0 的 uid,则可能存在更多限制。请参见 privileges(5)。
示例 1 获取当前 Shell 的进程特权
以下示例将获取当前 shell 的进程特权:
example$ ppriv $$ 387: -sh flags = <none> E: basic I: basic P: basic L: all
示例 2 从 Shell 的可继承的有效特权集中删除一个特权
以下示例将从 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 -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(5))。当在全局区域中运行时,会列出已定义的所有特权。
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(5)。
示例 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
将返回以下退出值:
操作成功。
出现错误。
进程文件
系统调用名称到系统调用号的映射
有关下列属性的说明,请参见 attributes(5):
|
调用为 Committed(已确定)。输出是 "Uncommitted"(未确定)。
gcore(1)、truss(1)、setpflags(2)、priv_str_to_set(3C)、proc(4)、attributes(5)、privileges(5)、zones(5)