Definición
Una Capabilitie hace referencia a una capacidad o privilegio asignado previamente a un binario en Linux, por ejemplo para tener cierta capacidad o para poder ejecutar cierta tarea privilegiada.
Listado y definiciones de Capabilities
Para poder listar las capabilities del sistema utilizamos el siguiente comando
getcap (ruta absoluta)
o también podemos listar todo lo del sistema con
getcap -r / 2>/dev/null
utilizamos el -r
de recursivo mas el /
para poder abarcar a partir de la raíz, y 2>
que es la redirección de STDERR porque como usuario no privilegiado hay ciertas rutas a las que no vamos a tener acceso.
Con el comando anterior veremos las capabilities que nosotros previamente tenemos que configurar a determinados binarios para poder ejecutar ciertas tareas, privilegiadas o lo que corresponda, además de binarios con capabilities ya establecidas por defecto.
Para poder asignar una capabilitie a un binario utilizamos. Como root
setcap cap_setuid+ep /usr/bin/python3.9
⇐— (Directorio al que le queremos asignar la capabilitie)
Hay diferentes tipos de Capabilities nosotros asignamos con el CMD
anterior el permiso de controlar el identificador de usuario.
Lo chequeamos con getcap !$
para ver el directorio previamente escrito /usr/bin/python3.9
Para quitársela usamos setcap -r /usr/bin/python3.9
Para mas información podemos visitar la Web de Capabilities existentes
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 lec-
tura, escritura y ejecución. (DAC = "control de acceso discre-
cional".)
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 normal-
mente 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), shm-
ctl(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 espe-
ciales 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 multi-
destino.
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 capaci-
dades 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 sis-
tema incluyendo: quotactl(2), mount(2), swapon(2), sethost-
name(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 planifi-
cación y prioridades para procesos arbitrarios (sched_setsched-
uler(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/ker-
nel/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).