| .TH CAPSH 1 "2020-10-27" "libcap 2" "User Commands" |
| .SH NAME |
| capsh \- capability shell wrapper |
| .SH SYNOPSIS |
| .B capsh |
| [\fIOPTION\fR]... |
| .SH DESCRIPTION |
| Linux capability support and use can be explored and constrained with |
| this tool. This tool provides a handy wrapper for certain types |
| of capability testing and environment creation. It also provides some |
| debugging features useful for summarizing capability state. |
| .SH OPTIONS |
| .B capsh |
| takes a number of optional arguments, acting on them in the |
| order they are provided. They are as follows: |
| .TP |
| .B \-\-help |
| Display the list of commands supported by |
| .BR capsh . |
| .TP |
| .B \-\-print |
| Display prevailing capability and related state. |
| .TP |
| .BI \-\- " [args]" |
| Execute |
| .B /bin/bash |
| with trailing arguments. Note, you can use |
| .B \-c 'command to execute' |
| for specific commands. |
| .TP |
| .B == |
| Execute |
| .B capsh |
| again with the remaining arguments. Useful for testing |
| .BR exec () |
| behavior. Note, PATH is searched when the running |
| .B capsh |
| was found via the shell's PATH searching. If the |
| .B exec |
| occurs after a |
| .BI \-\-chroot= /some/path |
| argument the PATH located binary may not be resolve to the same binary |
| as that running initially. This behavior is an intented feature as it |
| can complete the chroot transition. |
| .TP |
| .BI \-\-caps= cap-set |
| Set the prevailing process capabilities to those specified by |
| .IR cap-set . |
| Where |
| .I cap-set |
| is a text-representation of capability state as per |
| .BR cap_from_text (3). |
| .TP |
| .BI \-\-drop= cap-list |
| Remove the listed capabilities from the prevailing bounding set. The |
| capabilities are a comma-separated list of capabilities as recognized |
| by the |
| .BR cap_from_name (3) |
| function. Use of this feature requires that |
| .B capsh |
| is operating with |
| .B CAP_SETPCAP |
| in its effective set. |
| .TP |
| .BI \-\-inh= cap-list |
| Set the inheritable set of capabilities for the current process to |
| equal those provided in the comma separated list. For this action to |
| succeed, the prevailing process should already have each of these |
| capabilities in the union of the current inheritable and permitted |
| capability sets, or |
| .B capsh |
| should be operating with |
| .B CAP_SETPCAP |
| in its effective set. |
| .TP |
| .BI \-\-user= username |
| Assume the identity of the named user. That is, look up the user's |
| UID and GID |
| with |
| .BR getpwuid (3) |
| and their group memberships with |
| .BR getgrouplist (3) |
| and set them all using |
| .BR cap_setuid (3) |
| and |
| .BR cap_setgroups (3). |
| Following this command, the effective capabilities will be cleared, |
| but the permitted set will not be, so the running program is still |
| privileged. |
| .TP |
| .B \-\-modes |
| Lists all of the libcap modes supported by |
| .BR \-\-mode . |
| .TP |
| .BR \-\-mode= <mode> |
| Force the program into a |
| .BR cap_set_mode (3) |
| security mode. This is a set of securebits and prevailing capability |
| arrangement recommended for its pre-determined security stance. |
| .TP |
| .BR \-\-inmode= <mode> |
| Confirm that the prevailing mode is that specified in |
| .IR <mode> , |
| or exit with a status 1. |
| .TP |
| .BI \-\-uid= id |
| Force all |
| UID |
| values to equal |
| .I id |
| using the |
| .BR setuid (2) |
| system call. This argument may require explicit preparation of the |
| effective set. |
| .TP |
| .BR \-\-cap\-uid= <uid> |
| use the |
| .BR cap_setuid (3) |
| function to set the UID of the current process. This performs all |
| preparations for setting the UID without dropping capabilities in the |
| process. Following this command the prevailing effective capabilities |
| will be lowered. |
| .TP |
| .BI \-\-is\-uid= <id> |
| Exit with status 1 unless the current |
| UID equals |
| .IR <id> . |
| .TP |
| .BI \-\-gid= <id> |
| Force all |
| GID |
| values to equal |
| .I id |
| using the |
| .BR setgid (2) |
| system call. |
| .TP |
| .BI \-\-is\-gid= <id> |
| Exit with status 1 unless the current |
| GIQ equals |
| .IR <id> . |
| .TP |
| .BI \-\-groups= <gid-list> |
| Set the supplementary groups to the numerical list provided. The |
| groups are set with the |
| .BR setgroups (2) |
| system call. See |
| .B \-\-user |
| for a more convenient way of doing this. |
| .TP |
| .BI \-\-keep= <0|1> |
| In a non-pure capability mode, the kernel provides liberal privilege |
| to the super-user. However, it is normally the case that when the |
| super-user changes |
| UID |
| to some lesser user, then capabilities are dropped. For these |
| situations, the kernel can permit the process to retain its |
| capabilities after a |
| .BR setuid (2) |
| system call. This feature is known as |
| .I keep-caps |
| support. The way to activate it using this program is with this |
| argument. Setting the value to 1 will cause |
| .I keep-caps |
| to be active. Setting it to 0 will cause keep-caps to deactivate for |
| the current process. In all cases, |
| .I keep-caps |
| is deactivated when an |
| .BR exec () |
| is performed. See |
| .B \-\-secbits |
| for ways to disable this feature. |
| .TP |
| .BI \-\-secbits= N |
| Set the security-bits for the program. |
| This is done using the |
| .BR prctl (2) |
| .B PR_SET_SECUREBITS |
| operation. |
| The list of supported bits and their meaning can be found in |
| the |
| .B <sys/secbits.h> |
| header file. The program will list these bits via the |
| .B \-\-print |
| command. |
| The argument is expressed as a numeric bitmask, |
| in any of the formats permitted by |
| .BR strtoul (3). |
| .TP |
| .BI \-\-chroot= /some/path |
| Execute the |
| .BR chroot (2) |
| system call with the new root-directory (/) equal to |
| .IR path . |
| This operation requires |
| .B CAP_SYS_CHROOT |
| to be in effect. |
| .TP |
| .BI \-\-forkfor= sec |
| This command causes the program to fork a child process for so many |
| seconds. The child will sleep that long and then exit with status |
| 0. The purpose of this command is to support exploring the way |
| processes are killable in the face of capability changes. See the |
| .B \-\-killit |
| command. Only one fork can be active at a time. |
| .TP |
| .BI \-\-killit= sig |
| This commands causes a |
| .B \-\-forkfor |
| child to be |
| .BR kill (2)d |
| with the specified signal. The command then waits for the child to exit. |
| If the exit status does not match the signal being used to kill it, the |
| .B capsh |
| program exits with status 1. |
| .TP |
| .BI \-\-decode= N |
| This is a convenience feature. If you look at |
| .B /proc/1/status |
| there are some capability related fields of the following form: |
| .nf |
| |
| CapInh: 0000000000000000 |
| CapPrm: 0000003fffffffff |
| CapEff: 0000003fffffffff |
| CapBnd: 0000003fffffffff |
| CapAmb: 0000000000000000 |
| |
| .fi |
| This option provides a quick way to decode a capability vector |
| represented in this hexadecimal form. |
| Here's an example that decodes the two lowest capability bits: |
| .IP |
| .nf |
| $ \fBcapsh \-\-decode=3\fP |
| 0x0000000000000003=cap_chown,cap_dac_override |
| .fi |
| .TP |
| .BI \-\-supports= xxx |
| As the kernel evolves, more capabilities are added. This option can be used |
| to verify the existence of a capability on the system. For example, |
| .BI \-\-supports= cap_syslog |
| will cause |
| .B capsh |
| to promptly exit with a status of 1 when run on |
| kernel 2.6.27. However, when run on kernel 2.6.38 it will silently |
| succeed. |
| .TP |
| .BI \-\-has\-p= xxx |
| Exit with status 1 unless the |
| .I permitted |
| vector has capability |
| .B xxx |
| raised. |
| .TP |
| .B \-\-has\-ambient |
| Performs a check to see if the running kernel supports ambient |
| capabilities. If not, |
| .B capsh |
| exits with status 1. |
| .TP |
| .BI \-\-has\-a= xxx |
| Exit with status 1 unless the |
| .I ambient |
| vector has capability |
| .B xxx |
| raised. |
| .TP |
| .BI \-\-addamb= xxx |
| Adds the specified ambient capability to the running process. |
| .TP |
| .BI \-\-delamb= xxx |
| Removes the specified ambient capability from the running process. |
| .TP |
| .B \-\-noamb |
| Drops all ambient capabilities from the running process. |
| .SH "EXIT STATUS" |
| Following successful execution, |
| .B capsh |
| exits with status 0. Following |
| an error, |
| .B capsh |
| immediately exits with status 1. |
| .SH AUTHOR |
| Written by Andrew G. Morgan <[email protected]>. |
| .SH "REPORTING BUGS" |
| Please report bugs via: |
| .TP |
| https://bugzilla.kernel.org/buglist.cgi?component=libcap&list_id=1047723&product=Tools&resolution=--- |
| .SH "SEE ALSO" |
| .BR libcap (3), |
| .BR getcap (8), |
| .BR setcap (8) |
| and |
| .BR capabilities (7). |