'\" t
.\" Title: pkexec
.\" Author: [see the "AUTHOR" section]
.\" Generator: DocBook XSL Stylesheets vsnapshot
.\" Date: May 2009
.\" Manual: pkexec
.\" Source: polkit
.\" Language: English
.\"
.TH "PKEXEC" "1" "May 2009" "polkit" "pkexec"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.\" http://bugs.debian.org/507673
.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
.ad l
.\" -----------------------------------------------------------------
.\" * MAIN CONTENT STARTS HERE *
.\" -----------------------------------------------------------------
.SH "NAME"
pkexec \- Execute a command as another user
.SH "SYNOPSIS"
.HP \w'\fBpkexec\fR\ 'u
\fBpkexec\fR [\fB\-\-version\fR] [\fB\-\-disable\-internal\-agent\fR] [\fB\-\-help\fR]
.HP \w'\fBpkexec\fR\ 'u
\fBpkexec\fR [\fB\-\-keep\-cwd\fR] [\fB\-\-user\fR\ \fIusername\fR] \fIPROGRAM\fR [\fIARGUMENTS\fR...]
.SH "DESCRIPTION"
.PP
\fBpkexec\fR
allows an authorized user to execute
\fIPROGRAM\fR
as another user\&. If
\fIPROGRAM\fR
is not specified, the default shell will be run\&. If
\fIusername\fR
is not specified, then the program will be executed as the administrative super user,
\fIroot\fR\&.
.SH "RETURN VALUE"
.PP
Upon successful completion, the return value is the return value of
\fIPROGRAM\fR\&. If the calling process is not authorized or an authorization could not be obtained through authentication or an error occurred,
\fBpkexec\fR
exits with a return value of 127\&. If the authorization could not be obtained because the user dismissed the authentication dialog,
\fBpkexec\fR
exits with a return value of 126\&.
.SH "AUTHENTICATION AGENT"
.PP
\fBpkexec\fR, like any other polkit application, will use the authentication agent registered for the calling process or session\&. However, if no authentication agent is available, then
\fBpkexec\fR
will register its own textual authentication agent\&. This behavior can be turned off by passing the
\fB\-\-disable\-internal\-agent\fR
option\&.
.SH "SECURITY NOTES"
.PP
Executing a program as another user is a privileged operation\&. By default the action to check for (see
the section called \(lqACTION AND AUTHORIZATIONS\(rq) requires administrator authentication\&. In addition, the authentication dialog presented to the user will display the full path to the program to be executed so the user is aware of what will happen\&.
.PP
The environment that
\fIPROGRAM\fR
will run it, will be set to a minimal known and safe environment in order to avoid injecting code through
LD_LIBRARY_PATH
or similar mechanisms\&. In addition the
PKEXEC_UID
environment variable is set to the user id of the process invoking
\fBpkexec\fR\&. As a result,
\fBpkexec\fR
will not by default allow you to run X11 applications as another user since the
$DISPLAY
and
$XAUTHORITY
environment variables are not set\&. These two variables will be retained if the
\fIorg\&.freedesktop\&.policykit\&.exec\&.allow_gui\fR
annotation on an action is set to a nonempty value; this is discouraged, though, and should only be used for legacy programs\&.
.PP
\fBpkexec\fR
will run
\fIPROGRAM\fR
in
\fIusername\fR\*(Aqs home directory, unless
\fB\-\-keep\-cwd\fR
is used to override this behavior
.PP
Note that
\fBpkexec\fR
does no validation of the
\fIARGUMENTS\fR
passed to
\fIPROGRAM\fR\&. In the normal case (where administrator authentication is required every time
\fBpkexec\fR
is used), this is not a problem since if the user is an administrator he might as well just run
\fBpkexec bash\fR
to get root\&.
.PP
However, if an action is used for which the user can retain authorization (or if the user is implicitly authorized) this could be a security hole\&. Therefore, as a rule of thumb, programs for which the default required authorization is changed, should
\fBnever\fR
implicitly trust user input (e\&.g\&. like any other well\-written
\fIsuid\fR
program)\&.
.SH "ACTION AND AUTHORIZATIONS"
.PP
By default, the
\fIorg\&.freedesktop\&.policykit\&.exec\fR
action is used\&. To use another action, use the
\fIorg\&.freedesktop\&.policykit\&.exec\&.path\fR
annotation on an action with the value set to the full path of the program\&. In addition to specifying the program, the authentication message, description, icon and defaults can be specified\&. If the
\fIorg\&.freedesktop\&.policykit\&.exec\&.argv1\fR
annotation is present, the action will only be picked if the first argument to the program matches the value of the annotation\&.
.PP
Note that authentication messages may reference variables (see
the section called \(lqVARIABLES\(rq), for example
$(user)
will be expanded to the value of the
user
variable\&.
.SH "WRAPPER USAGE"
.PP
To avoid modifying existing software to prefix their command\-line invocations with
\fBpkexec\fR, it\*(Aqs possible to use
\fBpkexec\fR
in a
\m[blue]\fBshe\-bang wrapper\fR\m[]\&\s-2\u[1]\d\s+2
like this:
.sp
.if n \{\
.RS 4
.\}
.nf
#!/usr/bin/pkexec /usr/bin/python
import os
import sys
print "Hello, I\*(Aqm running as uid %d"%(os\&.getuid())
for n in range(len(sys\&.argv)):
print "arg[%d]=`%s\*(Aq"%(n, sys\&.argv[n])
.fi
.if n \{\
.RE
.\}
.PP
If this script is installed into
/usr/bin/my\-pk\-test, then the following annotations
.sp
.if n \{\
.RS 4
.\}
.nf
[\&.\&.\&.]
/usr/bin/python
/usr/bin/my\-pk\-test
[\&.\&.\&.]
.fi
.if n \{\
.RE
.\}
.PP
can be used to select the appropriate polkit action\&. Be careful to get the latter annotation right, otherwise it will match any
\fBpkexec\fR
invocation of
/usr/bin/python
scripts\&.
.SH "VARIABLES"
.PP
The following variables are set by
\fBpkexec\fR\&. They can be used in authorization rules and messages shown in authentication dialogs:
.PP
\fIprogram\fR
.RS 4
Fully qualified path to the program to be executed\&. Example:
\(lq/bin/cat\(rq
.RE
.PP
\fIcommand_line\fR
.RS 4
The requested command\-line (do not use this for any security checks, it is not secure)\&. Example:
\(lqcat /srv/xyz/foobar\(rq
.RE
.PP
\fIuser\fR
.RS 4
The user name of the user to execute the program as\&. Example:
\(lqdavidz\(rq
.RE
.PP
\fIuser\&.gecos\fR
.RS 4
The full name of the user to execute the program as\&. Example:
\(lqDavid Zeuthen\(rq
.RE
.PP
\fIuser\&.display\fR
.RS 4
A representation of the user to execute the program as that is suitable for display in an authentication dialog\&. Is typically set to a combination of the user name and the full name\&. Example:
\(lqDavid Zeuthen (davidz)\(rq
.RE
.SH "AUTHOR"
.PP
Written by David Zeuthen
with a lot of help from many others\&.
.SH "BUGS"
.PP
Please send bug reports to either the distribution or the polkit\-devel mailing list, see the link
\m[blue]\fB\%https://gitlab.freedesktop.org/polkit/polkit/-/issues/\fR\m[]
on how to subscribe\&.
.SH "SEE ALSO"
.PP
\fBpolkit\fR(8),
\fBpolkitd\fR(8),
\fBpkaction\fR(1),
\fBpkcheck\fR(1),
\fBpkttyagent\fR(1)
.SH "NOTES"
.IP " 1." 4
she-bang wrapper
.RS 4
\%http://en.wikipedia.org/wiki/Shebang_(Unix)
.RE