next up previous contents
Next: Overview Up: LinSec Capability Model Previous: Definition and Background   Contents


POSIX 1003.6 and Capabilities

POSIX 1003.64.2 defines, among other security related features, so called, Process Capabilities in the following manner (quoted from the Linux Capability FAQ [33]):

A process has three sets of bitmaps called the inheritable(I),
permitted(P), and effective(E) capabilities.  Each capability is
implemented as a bit in each of these bitmaps which is either set or
unset.  When a process tries to do a privileged operation, the
operating system will check the appropriate bit in the effective set
of the process (instead of checking whether the effective uid of the
process i 0 as is normally done).  

The permitted set of the process indicates the capabilities the
process can use.  The process can have capabilities set in the
permitted set that are not in the effective set.  This indicates that
the process has temporarily disabled this capability.  A process is
allowed to set a bit in its effective set only if it is available in
the permitted set.  The distinction between effective and permitted
exists so that processes can "bracket" operations that need privilege.

The inheritable capabilities are the capabilities of the current
process that should be inherited by a program executed by the current
process.  The permitted set of a process is masked against the
inheritable set during exec().  Nothing special happens during fork()
or clone().  Child processes and threads are given an exact copy of
the capabilities of the parent process.

POSIX 1003.6, as such, does not define neither the notion of Executable File Capabilities or the notion of User Capabilities.



Footnotes

... 1003.64.2
POSIX 1003.6 has been dropped recently after ten years of development and is to be super seeded by a new document. Capability definition, however, is not expected to change so the reference to the standard is still valuable. POSIX 1003.6 was formed from POSIX 1003.1e and POSIX 1003.2c.