Provided by: manpages-es_1.55-7_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)