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)

Linux 2.4.18                                      6 agosto 2002                                  CAPABILITIES(7)