PPRIV(1) User Commands PPRIV(1)

NAME


ppriv - inspect or modify process privilege sets and attributes

SYNOPSIS


/usr/bin/ppriv -e [-D | -N] [-M] [-s spec] command [arg]...


/usr/bin/ppriv [-v] [-S] [-D | -N] [-s spec]
[pid | core]...


/usr/bin/ppriv -l [-v] [privilege-specification]...


DESCRIPTION


The first invocation of the ppriv command runs the command specified with
the privilege sets and flags modified according to the arguments on the
command line.


The second invocation examines or changes the privilege state of running
process and core files.


The third invocation lists the privileges defined and information about
specified privileges or privileges set specifications.

OPTIONS


The following options are supported:

-D
Turns on privilege debugging for the processes or command
supplied.


-e
Interprets the remainder of the arguments as a command line
and runs the command line with specified privilege attributes
and sets.


-l
Lists all currently defined privileges on stdout.


-M
When a system is configured with Trusted Extensions, this
option turns on the NET_MAC_AWARE and NET_MAC_AWARE_INHERIT
process attributes.

A process with these attributes and the net_mac_aware
privilege can communicate with lower-level remote peers.


-N
Turns off privilege debugging for the processes or command
supplied.


-s spec
Modifies a process's privilege sets according to spec, a
specification with the format [AEILP][+-=]privsetspec,
containing no spaces, where:

AEILP
Indicates one or more letters indicating which
privilege sets to change. These are case
insensitive, for example, either a or A
indicates all privilege sets.


+-=
Indicates a modifier to respectively add (+),
remove (-), or assign (=) the listed privileges
to the specified set(s) in privsetspec.


privsetspec
Indicates a comma-separated privilege set
specification (priv1,priv2, and so on), as
described in priv_str_to_set(3C).

Modifying the same set with multiple -s options is possible as
long as there is either precisely one assignment to an
individual set or any number of additions and removals. That
is, assignment and addition or removal for one set are
mutually exclusive.


-S
Short. Reports the shortest possible output strings for sets.
The default is portable output. See priv_str_to_set(3C).


-v
Verbose. Reports privilege sets using privilege names.


USAGE


The ppriv utility examines processes and core files and prints or changes
their privilege sets.


ppriv can run commands with privilege debugging on or off or with fewer
privileges than the invoking process.


When executing a sub process, the only sets that can be modified are L
and I. Privileges can only be removed from L and I as ppriv starts with
P=E=I.


ppriv can also be used to remove privileges from processes or to convey
privileges to other processes. In order to control a process, the
effective set of the ppriv utility must be a super set of the controlled
process's E, I, and P. The utility's limit set must be a super set of the
target's limit set. If the target's process uids do not match, the
{PRIV_PROC_OWNER} privilege must be asserted in the utility's effective
set. If the controlled processes have any uid with the value 0, more
restrictions might exist. See privileges(7).

EXAMPLES


Example 1: Obtaining the Process Privileges of the Current Shell




The following example obtains the process privileges of the current
shell:


example$ ppriv $$
387: -sh
flags = <none>
E: basic
I: basic
P: basic
L: all


Example 2: Removing a Privilege From Your Shell's Inheritable and


Effective Set


The following example removes a privilege from your shell's inheritable
and effective set.


example$ ppriv -s EI-proc_session $$


The subprocess can still inspect the parent shell but it can no longer
influence the parent because the parent has more privileges in its
Permitted set than the ppriv child process:


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


Example 3: Running a Process with Privilege Debugging




The following example runs a process with privilege debugging:


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


The privilege debugging error messages are sent to the controlling
terminal of the current process. The needed at address specification is
an artifact of the kernel implementation and it can be changed at any
time after a software update.


The system call number can be mapped to a system call using
/etc/name_to_sysnum.


Example 4: Listing the Privileges Available in the Current Zone




The following example lists the privileges available in the current zone
(see zones(7)). When run in the global zone, all defined privileges are
listed.


example$ ppriv -l zone
... listing of all privileges elided ...


Example 5: Examining a Privilege Aware Process




The following example examines a privilege aware process:


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


See setpflags(2) for explanations of the flags.


EXIT STATUS


The following exit values are returned:

0
Successful operation.


non-zero
An error has occurred.


FILES


/proc/*
Process files


/etc/name_to_sysnum
system call name to number mapping


ATTRIBUTES


See attributes(7) for descriptions of the following attributes:


+--------------------+-----------------+
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
+--------------------+-----------------+
|Interface Stability | See below. |
+--------------------+-----------------+


The invocation is Committed. The output is Uncommitted.

SEE ALSO


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

February 24, 2008 PPRIV(1)