Provided by: manpages-es_1.55-10_all bug

NOMBRE

       capabilities - visión general del sistema de capacidades de Linux

DESCRIPCIÓN

       Con   el   propósito   de   realizar  comprobaciones  de  permisos,  las  implementaciones
       tradicionales de Unix distinguen dos categorías de procesos: procesos privilegiados  (cuyo
       identificador de usuario efectivo es 0, refiriéndose al superusuario o root) y procesos no
       privilegiados (cuyo identificador de usuario efectivo es distinto de cero).  Los  procesos
       privilegiados  evitan  todas  las  comprobaciones de permisos del núcleo, mientras que los
       procesos no privilegiados se ven sujetos a severas comprobaciones de permisos  basadas  en
       las  credenciales del proceso (normalmente: ID de usuario efectivo, ID de grupo efectivo y
       lista de grupos adicionales).

       Desde la versión 2.2 del núcleo, Linux ofrece  un  (hasta  ahora  incompleto)  sistema  de
       capacidades,  que  divide  los  privilegios  asociados tradicionalmente al superusuario en
       unidades distintas que pueden ser activadas y desactivadas independientemente.

   Lista de capacidades
       Hasta la versión 2.4.18 de Linux, las siguientes capacidades están implementadas:

       CAP_CHOWN
              Permite cambios arbitrarios en los IDs de usuario y de grupo de los  ficheros  (vea
              chown(2)).

       CAP_DAC_OVERRIDE
              Evita  las  comprobaciones  de  permisos  sobre operaciones de lectura, escritura y
              ejecución.  (DAC = "control de acceso discrecional".)

       CAP_DAC_READ_SEARCH
              Evita comprobaciones de permisos sobre operaciones de lectura de ficheros y lectura
              y ejecución de directorios.

       CAP_FOWNER
              Evita comprobaciones de permisos sobre operaciones que normalmente requieren que el
              ID de usuario del sistema de ficheros del proceso coincida con el ID de usuario del
              fichero   (p.e.,   utime(2)),   excluyendo   aquellas   operaciones  cubiertas  por
              CAP_DAC_OVERRIDE y CAP_DAC_READ_SEARCH; ignora  el  bit  pegajoso  (sticky)  en  el
              borrado de ficheros.

       CAP_FSETID
              No borra los bits set-user-ID y set-group-ID cuando se modifica un fichero; permite
              establecer el bit set-group-ID para un fichero cuyo ID de grupo no coincide con  el
              del  sistema  de  ficheros  o  cualquier  otro  ID  de  grupo adicional del proceso
              invocador.

       CAP_IPC_LOCK
              Permite el bloqueo en memoria (mlock(2), mlockall(2), shmctl(2)).

       CAP_IPC_OWNER
              Evita comprobaciones de permisos para las operaciones sobre objetos System V IPC.

       CAP_KILL
              Evita comprobaciones de permisos para enviar señales (vea kill(2)).

       CAP_LEASE
              (Linux 2.4 en adelante)   Permite  que  se  establezcan  arriendos  sobre  ficheros
              arbitrarios (vea fcntl(2)).

       CAP_LINUX_IMMUTABLE
              Permite  establecer  los  atributos  extendidos  EXT2_APPEND_FL y EXT2_IMMUTABLE_FL
              sobre ficheros del sistema de ficheros ext2.

       CAP_MKNOD
              (Linux 2.4 en adelante) Permite la creación de ficheros especiales usando mknod(2).

       CAP_NET_ADMIN
              Permite varias  operaciones  relacionadas  con  redes  (p.e.,  establecer  opciones
              privilegiadas  sobre  conectores,  habilitar  la  difusión de paquetes multidestino
              (multicasting), configuración de interfaces, modificar tablas de encaminamiento).

       CAP_NET_BIND_SERVICE
              Permite ligar conectores a puertos reservados del dominio de Internet  (números  de
              puerto menores que 1024).

       CAP_NET_BROADCAST
              (No se usa) Permite la difusión universal (broadcasting) de paquetes a través de un
              conector y la escucha de paquetes multidestino.

       CAP_NET_RAW
              Permite el uso de conectores de tipo RAW y PACKET.

       CAP_SETGID
              Permite manipulaciones arbitrarias de los IDs de grupo y de  la  lista  de  IDs  de
              grupo adicionales de un proceso; permite el uso de IDs de grupo falsificados cuando
              se pasan credenciales de conectores a través de conectores de dominio Unix.

       CAP_SETPCAP
              Concede o elimina cualquier capacidad en el conjunto de capacidades permitidas  del
              invocador a o desde cualquier otro proceso.

       CAP_SETUID
              Permite   manipulaciones  arbitrarias  de  los  IDs  de  usuario  de  los  procesos
              (setuid(2), etc.); permite el uso de IDs de usuario falsificados  cuando  se  pasan
              credenciales de conectores a través de conectores de dominio Unix.

       CAP_SYS_ADMIN
              Permite  una  variedad  de  operaciones  de  administración del sistema incluyendo:
              quotactl(2),  mount(2),  swapon(2),  sethostname(2),  setdomainname(2),  IPC_SET  y
              operaciones  IPC_RMID  sobre objetos arbitrarios IPC de System V; permite el uso de
              IDs de usuario falsificados cuando se pasan credenciales de conectores.

       CAP_SYS_BOOT
              Permite llamadas a reboot(2).

       CAP_SYS_CHROOT
              Permite llamadas a chroot(2).

       CAP_SYS_MODULE
              Permite cargar y eliminar módulos del núcleo.

       CAP_SYS_NICE
              Permite aumentar el valor nice del proceso invocador  (nice(2),  setpriority(2))  y
              cambiar  el  valor  nice  de  procesos arbitrarios; permite establecer políticas de
              planificación de tiempo real para el proceso invocador y  establecer  políticas  de
              planificación  y  prioridades  para  procesos  arbitrarios  (sched_setscheduler(2),
              sched_setparam(2)).

       CAP_SYS_PACCT
              Permite llamadas a acct(2).

       CAP_SYS_PTRACE
              Permite el seguimiento detallado de procesos arbitrarios usando ptrace(2)

       CAP_SYS_RAWIO
              Permite operaciones sobre puertos de E/S (iopl(2) y ioperm(2)).

       CAP_SYS_RESOURCE
              Permite el uso de espacio reservado en sistemas de ficheros ext2; llamadas ioctl(2)
              para  controlar  el  registro  en  ext3;  sobrescribir los límites de las cuotas de
              disco; incrementar los límites de  recursos  (vea  setrlimit(2));  sobrescribir  el
              límite  del recurso RLIMIT_NPROC; incrementar el límite msg_qbytes para una cola de
              mensajes  por  encima  del  limite  en  /proc/sys/kernel/msgmnb  (vea  msgop(2)   y
              msgctl(2).

       CAP_SYS_TIME
              Permite  la  modificación  del  reloj  del  sistema (settimeofday(2), adjtimex(2));
              permite la modificación del reloj de tiempo real (hardware)

       CAP_SYS_TTY_CONFIG
              Permite llamadas a vhangup(2).

   Capacidades de procesos
       Cada proceso tiene tres conjuntos de capacidades conteniendo cero o más de las capacidades
       citadas arriba:

       Efectivas:
              las  capacidades usadas por el núcleo para llevar a cabo comprobaciones de permisos
              para el proceso.

       Permitidas:
              la capacidades que el proceso puede asumir (esto  es,  un  superconjunto  limitante
              para  los conjuntos de efectivas y heredadas).  Si un proceso elimina una capacidad
              de su conjunto de permitidas, no puede volver nunca a  adquirir  esa  capacidad  (a
              menos que ejecute un programa set-UID-root).

       Heredadas:
              las capacidades que se conservan tras llamadas a execve(2).

       En  la implementación actual, a un proceso se le conceden todas las capacidades permitidas
       y efectivas (sujetas a la operación del conjunto limitador  de  capacidades  descrita  más
       abajo) cuando ejecuta un programa set-UID-root o si un proceso con ID de usuario real cero
       ejecuta un nuevo programa.

       Un hijo creado con fork(2) hereda copias de los conjuntos de capacidades del padre.

       Usando capset(2), un proceso puede manipular su propio conjunto de capacidades o, si tiene
       la capacidad CAP_SETPCAP, los de otros procesos.

   Conjunto limitador de capacidades
       Cuando  un  programa se ejecuta mediante exec, a las capacidades permitidas y efectivas se
       les aplica un AND con el valor actual del así llamado conjunto limitador  de  capacidades,
       definido  en  el  fichero  /proc/sys/kernel/cap-bound.   Este parámetro se puede usar para
       limitar de forma  global  las  capacidades  otorgadas  a  todos  los  procesos  ejecutados
       posteriormente.   En  un  sistema  estándar,  el conjunto limitador de capacidades siempre
       desactiva  la  capacidad  CAP_SETPCAP.   Para  eliminar  esta  restricción,  modifique  la
       definición de CAP_INIT_EFF_SET en include/linux/capability.h y reconstruya el núcleo.

   Implementación actual y futura
       Una implementación completa de capacidades requiere:

       1.  que  para todas las operaciones privilegiadas, el núcleo compruebe si el proceso tiene
           la capacidad requerida en su conjunto efectivo.

       2.  que el núcleo proporcione llamadas al sistema permitiendo modificar  y  recuperar  los
           conjuntos de capacidades de un proceso.

       3.  el  soporte  del sistema de ficheros para asociar capacidades a un fichero ejecutable,
           para que un proceso obtenga esas capacidades cuando el fichero sea ejecutado  mediante
           exec.

       Hasta la versión 2.4.18 de Linux, sólo se cumplen los dos primeros requisitos.

       Finalmente,  debería  ser  posible  asociar  tres  conjuntos  de  capacidades a un fichero
       ejecutable, que en conjunción con los conjuntos de capacidades del proceso, determinen las
       capacidades de un proceso después de un exec:

       Permitidas:
              a  este conjunto se le aplica la operación AND con el conjunto heredado del proceso
              para determinar qué capacidades heredadas le son permitidas al proceso después  del
              exec.

       Forzadas:
              las capacidades permitidas automáticamente al proceso, sin importar las capacidades
              heredadas del proceso.

       Efectivas:
              aquellas capacidades en  el  nuevo  conjunto  permitido  del  proceso  son  también
              activadas  en  el nuevo conjunto efectivo.  (F(efectivas) normalmente debería ser o
              todo ceros o todo unos. Ver más abajo.)

       Mientras tanto, puesto que la implementación actual no soporta  conjuntos  de  capacidades
       sobre ficheros, durante un exec:

       1.  Se asume que inicialmente los tres conjuntos de capacidades del fichero están vacíos.

       2.  Si  se está ejecutando un programa set-UID-root o si el ID de usuario real del proceso
           es 0 (root), entonces se considera que los conjuntos de las capacidades  permitidas  y
           forzadas  del  fichero  están  llenos  de  unos (es decir, todas las capacidades están
           activas).

       3.  Si se está ejecutando un programa set-UID-root program, entonces se considera  que  el
           conjunto de capacidades efectivas del fichero está lleno de unos.

       Durante  un exec, el núcleo calcula las nuevas capacidades del proceso usando el siguiente
       algoritmo:

           P'(permitidas) = (P(heredadas) & F(permitidas)) | (F(forzadas) & cap_bset)

           P'(efectivas) = P'(permitidas) & F(efectivas)

           P'(heredadas) = P(heredadas)    [i.e., no se modifica]

       donde:

       P         denota el valor del conjunto de capacidades de un proceso antes del exec

       P'        denota el valor del conjunto de capacidades de un proceso después del exec

       F         denota un conjunto de capacidades de fichero

       cap_bset  es el valor del conjunto limitador de capacidades.

OBSERVACIONES

       El paquete libcap ofrece un conjunto de rutinas para establecer y obtener las  capacidades
       de un proceso que resultan más cómodas y con menos probabilidad de cambiar que la interfaz
       provista por capset(2) y capget(2).

CONFORME A

       Ningún estándar determina las capacidades, aunque  la  implementación  de  capacidades  de
       Linux se basa en el retraído borrador del estándar POSIX 1003.1e.

FALLOS

       No  hay  hasta  ahora  soporte del sistema de ficheros para permitir asociar capacidades a
       ficheros ejecutables.

VÉASE TAMBIÉN

       capget(2), prctl(2)