Provided by:
manpages-es_1.55-10_all 
NOMBRE
capabilities - vision general del sistema de capacidades de Linux
DESCRIPCI'ON
Con el proposito de realizar comprobaciones de permisos, las
implementaciones tradicionales de Unix distinguen dos categorias de
procesos: procesos privilegiados (cuyo identificador de usuario
efectivo es 0, refiriendose 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 nucleo, 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 version 2.2 del nucleo, 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 version 2.4.18 de Linux, las siguientes capacidades estan
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 ejecucion. (DAC = "control de acceso
discrecional".)
CAP_DAC_READ_SEARCH
Evita comprobaciones de permisos sobre operaciones de lectura de
ficheros y lectura y ejecucion 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 senales (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 creacion de ficheros
especiales usando mknod(2).
CAP_NET_ADMIN
Permite varias operaciones relacionadas con redes (p.e.,
establecer opciones privilegiadas sobre conectores, habilitar la
difusion de paquetes multidestino (multicasting), configuracion
de interfaces, modificar tablas de encaminamiento).
CAP_NET_BIND_SERVICE
Permite ligar conectores a puertos reservados del dominio de
Internet (numeros de puerto menores que 1024).
CAP_NET_BROADCAST
(No se usa) Permite la difusion universal (broadcasting) de
paquetes a traves 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 traves 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 traves
de conectores de dominio Unix.
CAP_SYS_ADMIN
Permite una variedad de operaciones de administracion 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 modulos del nucleo.
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 politicas de planificacion de tiempo real
para el proceso invocador y establecer politicas de
planificacion 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 limites de las cuotas de disco; incrementar los
limites de recursos (vea setrlimit(2)); sobrescribir el limite
del recurso RLIMIT_NPROC; incrementar el limite 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 modificacion del reloj del sistema (settimeofday(2),
adjtimex(2)); permite la modificacion 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 mas
de las capacidades citadas arriba:
Efectivas:
las capacidades usadas por el nucleo 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 implementacion actual, a un proceso se le conceden todas las
capacidades permitidas y efectivas (sujetas a la operacion del conjunto
limitador de capacidades descrita mas 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 asi
llamado conjunto limitador de capacidades, definido en el fichero
/proc/sys/kernel/cap-bound. Este parametro se puede usar para limitar
de forma global las capacidades otorgadas a todos los procesos
ejecutados posteriormente. En un sistema estandar, el conjunto
limitador de capacidades siempre desactiva la capacidad CAP_SETPCAP.
Para eliminar esta restriccion, modifique la definicion de
CAP_INIT_EFF_SET en include/linux/capability.h y reconstruya el nucleo.
Implementaci'on actual y futura
Una implementacion completa de capacidades requiere:
1. que para todas las operaciones privilegiadas, el nucleo compruebe
si el proceso tiene la capacidad requerida en su conjunto efectivo.
2. que el nucleo 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 version 2.4.18 de Linux, solo se cumplen los dos primeros
requisitos.
Finalmente, deberia ser posible asociar tres conjuntos de capacidades a
un fichero ejecutable, que en conjuncion con los conjuntos de
capacidades del proceso, determinen las capacidades de un proceso
despues de un exec:
Permitidas:
a este conjunto se le aplica la operacion AND con el conjunto
heredado del proceso para determinar que capacidades heredadas
le son permitidas al proceso despues del exec.
Forzadas:
las capacidades permitidas automaticamente al proceso, sin
importar las capacidades heredadas del proceso.
Efectivas:
aquellas capacidades en el nuevo conjunto permitido del proceso
son tambien activadas en el nuevo conjunto efectivo.
(F(efectivas) normalmente deberia ser o todo ceros o todo unos.
Ver mas abajo.)
Mientras tanto, puesto que la implementacion actual no soporta
conjuntos de capacidades sobre ficheros, durante un exec:
1. Se asume que inicialmente los tres conjuntos de capacidades del
fichero estan vacios.
2. Si se esta 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
estan llenos de unos (es decir, todas las capacidades estan
activas).
3. Si se esta ejecutando un programa set-UID-root program, entonces se
considera que el conjunto de capacidades efectivas del fichero esta
lleno de unos.
Durante un exec, el nucleo 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
despues 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 mas comodas y con
menos probabilidad de cambiar que la interfaz provista por capset(2) y
capget(2).
CONFORME A
Ningun estandar determina las capacidades, aunque la implementacion de
capacidades de Linux se basa en el retraido borrador del estandar POSIX
1003.1e.
FALLOS
No hay hasta ahora soporte del sistema de ficheros para permitir
asociar capacidades a ficheros ejecutables.
V'EASE TAMBI'EN
capget(2), prctl(2)