capabilities - phpMan

Command: man perldoc info search(apropos)  


CAPABILITIES(7)            Linux Programmer's Manual           CAPABILITIES(7)



NAME
       capabilities - overview of Linux capabilities

DESCRIPTION
       For  the  purpose of performing permission checks, traditional Unix implementations
       distinguish two categories of processes: privileged processes (whose effective user
       ID  is  0,  referred  to  as  superuser or root), and unprivileged processes (whose
       effective UID is non-zero).  Privileged  processes  bypass  all  kernel  permission
       checks,  while unprivileged processes are subject to full permission checking based
       on the process's credentials (usually: effective UID, effective GID, and supplemen-
       tary group list).

       Starting  with  kernel  2.2,  Linux divides the privileges traditionally associated
       with superuser into distinct units, known as capabilities, which  can  be  indepen-
       dently enabled and disabled.  Capabilities are a per-thread attribute.

   Capabilities List
       As at Linux 2.6.14, the following capabilities are implemented:

       CAP_AUDIT_CONTROL (since Linux 2.6.11)
              Enable  and  disable kernel auditing; change auditing filter rules; retrieve
              auditing status and filtering rules.

       CAP_AUDIT_WRITE (since Linux 2.6.11)
              Allow records to be written to kernel auditing log.

       CAP_CHOWN
              Allow arbitrary changes to file UIDs and GIDs (see chown(2)).

       CAP_DAC_OVERRIDE
              Bypass file read, write, and execute permission  checks.   (DAC  =  "discre-
              tionary access control".)

       CAP_DAC_READ_SEARCH
              Bypass file read permission checks and directory read and execute permission
              checks.

       CAP_FOWNER
              Bypass permission checks on operations that normally require the file system
              UID  of the process to match the UID of the file (e.g., chmod(2), utime(2)),
              excluding   those   operations   covered   by   the   CAP_DAC_OVERRIDE   and
              CAP_DAC_READ_SEARCH;  set  extended file attributes (see chattr(1)) on arbi-
              trary files; set Access Control Lists  (ACLs)  on  arbitrary  files;  ignore
              directory sticky bit on file deletion; specify O_NOATIME for arbitrary files
              in open(2) and fcntl(2).

       CAP_FSETID
              Don't clear set-user-ID and set-group-ID bits when a file is modified;  per-
              mit  setting of the set-group-ID bit for a file whose GID does not match the
              file system or any of the supplementary GIDs of the calling process.

       CAP_IPC_LOCK
              Permit memory locking (mlock(2), mlockall(2), mmap(2), shmctl(2)).

       CAP_IPC_OWNER
              Bypass permission checks for operations on System V IPC objects.

       CAP_KILL
              Bypass permission checks for sending signals (see kill(2)).   This  includes
              use of the KDSIGACCEPT ioctl.

       CAP_LEASE
              (Linux  2.4 onwards)  Allow file leases to be established on arbitrary files
              (see fcntl(2)).

       CAP_LINUX_IMMUTABLE
              Allow setting of the  EXT2_APPEND_FL  and  EXT2_IMMUTABLE_FL  extended  file
              attributes (see chattr(1)).

       CAP_MKNOD
              (Linux 2.4 onwards) Allow creation of special files using mknod(2).

       CAP_NET_ADMIN
              Allow  various  network-related  operations (e.g., setting privileged socket
              options, enabling multicasting, interface configuration,  modifying  routing
              tables).

       CAP_NET_BIND_SERVICE
              Allow  binding  to  Internet domain reserved socket ports (port numbers less
              than 1024).

       CAP_NET_BROADCAST
              (Unused)  Allow socket broadcasting, and listening multicasts.

       CAP_NET_RAW
              Permit use of RAW and PACKET sockets.

       CAP_SETGID
              Allow arbitrary manipulations of process GIDs and  supplementary  GID  list;
              allow forged GID when passing socket credentials via Unix domain sockets.

       CAP_SETPCAP
              Grant  or  remove any capability in the caller's permitted capability set to
              or from any other process.

       CAP_SETUID
              Allow arbitrary  manipulations  of  process  UIDs  (setuid(2),  setreuid(2),
              setresuid(2), setfsuid(2)); allow forged UID when passing socket credentials
              via Unix domain sockets.

       CAP_SYS_ADMIN
              Permit a range of system administration operations  including:  quotactl(2),
              mount(2),   umount(2),  swapon(2),  swapoff(2),  sethostname(2),  setdomain-
              name(2), IPC_SET and IPC_RMID operations on arbitrary System V IPC  objects;
              perform   operations  on  trusted  and  security  Extended  Attributes  (see
              attr(5));   call   lookup_dcookie(2);   use    ioprio_set(2)    to    assign
              IOPRIO_CLASS_RT   and  IOPRIO_CLASS_IDLE  I/O  scheduling  classes;  perform
              keyctl(2) KEYCTL_CHOWN and KEYCTL_SETPERM operations.  allow forged UID when
              passing  socket  credentials;  exceed /proc/sys/fs/file-max, the system-wide
              limit on the number of open files, in system calls that  open  files  (e.g.,
              accept(2), execve(2), open(2), pipe(2); without this capability these system
              calls will fail with the error ENFILE if this limit is encountered);  employ
              CLONE_NEWNS  flag  with  clone(2)  and  unshare(2); perform KEYCTL_CHOWN and
              KEYCTL_SETPERM keyctl(2) operations.

       CAP_SYS_BOOT
              Permit calls to reboot(2) and kexec_load(2).

       CAP_SYS_CHROOT
              Permit calls to chroot(2).

       CAP_SYS_MODULE
              Allow loading and unloading of kernel modules; allow modifications to  capa-
              bility bounding set (see init_module(2) and delete_module(2)).

       CAP_SYS_NICE
              Allow  raising  process nice value (nice(2), setpriority(2)) and changing of
              the nice value for arbitrary processes; allow setting of real-time  schedul-
              ing policies for calling process, and setting scheduling policies and prior-
              ities for arbitrary  processes  (sched_setscheduler(2),  sched_setparam(2));
              set  CPU  affinity  for  arbitrary processes (sched_setaffinity(2)); set I/O
              scheduling class and priority for arbitrary processes (ioprio_set(2)); allow
              migrate_pages(2) to be applied to arbitrary processes and allow processes to
              be migrated to arbitrary nodes; allow move_pages(2) to be applied  to  arbi-
              trary   processes;   use   the   MPOL_MF_MOVE_ALL  flag  with  mbind(2)  and
              move_pages(2).

       CAP_SYS_PACCT
              Permit calls to acct(2).

       CAP_SYS_PTRACE
              Allow arbitrary processes to be traced using ptrace(2)

       CAP_SYS_RAWIO
              Permit I/O port operations (iopl(2) and ioperm(2)); access /proc/kcore.

       CAP_SYS_RESOURCE
              Permit: use of reserved space on ext2 file systems; ioctl(2) calls  control-
              ling ext3 journaling; disk quota limits to be overridden; resource limits to
              be increased (see setrlimit(2)); RLIMIT_NPROC resource limit to be  overrid-
              den;  msg_qbytes  limit  for a message queue to be raised above the limit in
              /proc/sys/kernel/msgmnb (see msgop(2) and msgctl(2).

       CAP_SYS_TIME
              Allow modification of system clock (settimeofday(2), stime(2), adjtimex(2));
              allow modification of real-time (hardware) clock

       CAP_SYS_TTY_CONFIG
              Permit calls to vhangup(2).

   Capability Sets
       Each thread has three capability sets containing zero or more of the above capabil-
       ities:

       Effective:
              the capabilities used by the kernel to perform  permission  checks  for  the
              thread.

       Permitted:
              the  capabilities  that the thread may assume (i.e., a limiting superset for
              the effective and inheritable sets).  If a thread drops  a  capability  from
              its  permitted  set,  it  can  never  re-acquire  that capability (unless it
              exec()s a set-user-ID-root program).

       inheritable:
              the capabilities preserved across an execve(2).

       A child created via fork(2) inherits copies of its parent's capability  sets.   See
       below for a discussion of the treatment of capabilities during exec().

       Using capset(2), a thread may manipulate its own capability sets, or, if it has the
       CAP_SETPCAP capability, those of a thread in another process.

   Capability bounding set
       When a program is execed, the permitted and effective capabilities are  ANDed  with
       the  current  value  of  the so-called capability bounding set, defined in the file
       /proc/sys/kernel/cap-bound.  This parameter can be  used  to  place  a  system-wide
       limit  on the capabilities granted to all subsequently executed programs.  (Confus-
       ingly, this bit  mask  parameter  is  expressed  as  a  signed  decimal  number  in
       /proc/sys/kernel/cap-bound.)

       Only the init process may set bits in the capability bounding set; other than that,
       the superuser may only clear bits in this set.

       On a standard system the capability bounding set always masks out  the  CAP_SETPCAP
       capability.   To  remove  this  restriction  (dangerous!), modify the definition of
       CAP_INIT_EFF_SET in include/linux/capability.h and rebuild the kernel.

       The capability bounding set feature was added to Linux starting with kernel version
       2.2.11.

   Current and Future Implementation
       A full implementation of capabilities requires:


       2.  that  the kernel provide system calls allowing a thread's capability sets to be
           changed and retrieved.

       3.  file system support for attaching capabilities to an executable file, so that a
           process gains those capabilities when the file is execed.

       As at Linux 2.6.14, only the first two of these requirements are met.

       Eventually,  it  should be possible to associate three capability sets with an exe-
       cutable file, which, in conjunction with the capability sets of  the  thread,  will
       determine the capabilities of a thread after an exec():

       Inheritable (formerly known as allowed):
              this  set  is  ANDed  with  the  thread's inheritable set to determine which
              inheritable capabilities are permitted to the thread after the exec().

       Permitted (formerly known as forced):
              the capabilities automatically permitted to the thread,  regardless  of  the
              thread's inheritable capabilities.

       Effective:
              those  capabilities  in the thread's new permitted set are also to be set in
              the new effective set.  (F(effective) would normally be either all zeroes or
              all ones.)

       In  the meantime, since the current implementation does not support file capability
       sets, during an exec():

       1.  All three file capability sets are initially assumed to be cleared.

       2.  If a set-user-ID-root program is being execed, or the real user ID of the  pro-
           cess is 0 (root) then the file inheritable and permitted sets are defined to be
           all ones (i.e., all capabilities enabled).

       3.  If a set-user-ID-root program is being executed, then the file effective set is
           defined to be all ones.

   Transformation of Capabilities During exec()
       During  an  exec(), the kernel calculates the new capabilities of the process using
       the following algorithm:

           P'(permitted) = (P(inheritable) & F(inheritable)) |
                           (F(permitted) & cap_bset)

           P'(effective) = P'(permitted) & F(effective)

           P'(inheritable) = P(inheritable)    [i.e., unchanged]

       where:

       P         denotes the value of a thread capability set before the exec()

       P'        denotes the value of a capability set after the exec()

       F         denotes a file capability set

       cap_bset  is the value of the capability bounding set.

       In the current implementation, the upshot of this algorithm is that when a  process
       exec()s  a  set-user-ID-root  program, or when a process with an effective UID of 0
       exec()s a program, it gains all capabilities in its permitted and  effective  capa-
       bility sets, except those masked out by the capability bounding set (i.e., CAP_SET-
       PCAP).  This provides semantics that are the same as those provided by  traditional
       Unix systems.

   Effect of User ID Changes on Capabilities
       To  preserve  the traditional semantics for transitions between 0 and non-zero user
       IDs, the kernel makes the following  changes  to  a  thread's  capability  sets  on
       changes to the thread's real, effective, saved set, and file system user IDs (using
       setuid(2), setresuid(2), or similar):

       1.  If one or more of the real, effective or saved set user IDs was  previously  0,
           and as a result of the UID changes all of these IDs have a non-zero value, then
           all capabilities are cleared from the permitted and effective capability  sets.

       2.  If  the  effective user ID is changed from 0 to non-zero, then all capabilities
           are cleared from the effective set.

       3.  If the effective user ID is changed from non-zero to 0, then the permitted  set
           is copied to the effective set.

       4.  If the file system user ID is changed from 0 to non-zero (see setfsuid(2)) then
           the following capabilities are  cleared  from  the  effective  set:  CAP_CHOWN,
           CAP_DAC_OVERRIDE, CAP_DAC_READ_SEARCH, CAP_FOWNER, and CAP_FSETID.  If the file
           system UID is changed from non-zero to 0, then any of these  capabilities  that
           are enabled in the permitted set are enabled in the effective set.

       If a thread that has a 0 value for one or more of its user IDs wants to prevent its
       permitted capability set being cleared when it resets all of its user IDs  to  non-
       zero values, it can do so using the prctl() PR_SET_KEEPCAPS operation.

NOTES
       The  libcap  package provides a suite of routines for setting and getting capabili-
       ties that is more comfortable and less likely to change than the interface provided
       by capset(2) and capget(2).

CONFORMING TO
       No  standards govern capabilities, but the Linux capability implementation is based
       on the withdrawn POSIX.1e draft standard.

BUGS
       There is as yet no file system support allowing capabilities to be associated  with
       executable files.

SEE ALSO
       capget(2), prctl(2), setfsuid(2), pthreads(7)



Linux 2.6.18                      2006-07-31                   CAPABILITIES(7)

Generated by $Id: phpMan.php,v 4.54 2007/08/21 09:05:22 chedong Exp $ Author: Che Dong
On Apache/2.2.3 (Red Hat)
Under GNU General Public License
2009-11-10 04:18 @127.0.0.1 CrawledBy CCBot/1.0 (+http://www.commoncrawl.org/bot.html)
Valid XHTML 1.0!Valid CSS!