Linux Capabilities

From WikiEtl
Jump to: navigation, search

Antes de Capabilities: sudo

Cuando un usuario quería realizar tareas de root, tenia que hacerlo mediante el comando sudo.
Para ello había que configurar previamente el fichero /etc/sudoers especificando que usuarios podian ejecutar los progrmas con los privilegios de root.
De forma habitual había que ejecutar wireshark de la siguiente manera:

$ sudo wireshark

Este proceso era muy repetitivo y no muy eficiente así que llegaron las Capabilities

¿Qué son las Linux Capabilities?

Las capabilities nos permiten gestionar que permisos tiene un proceso para acceder a las partes del kernel. Independientemente del usuario que lo lance.
Existen una serie de capabilities que se pueden habilitar a los programa para que tengan acceso a dichas partes que gestionan.
Estos cuentan con Flags para poder determinar que acciones están disponibles:

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

Permitidas (p): 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 (i): las capacidades que se conservan tras llamadas a execve(2).

Ver y cambiar capabilities

Es posible siendo root ver y editar las capabilities de un programa mediante getcap y setcap

Como /usr está en modo lectura es necesario montarlo como escritura para poder editar las capabilities de este.

root@monitor03:~# mount -o remount, rw /usr
root@monitor03:~# setcap cap_net_admin,cap_net_raw+eip /usr/bin/wireshark
root@monitor03:~# getcap /usr/bin/wireshark 
/usr/bin/wireshark = cap_net_admin,cap_net_raw+eip

En este ejemplo se puede ver como se le permite a wireshark editar la configuración de red (cap_net_admin) y habilitar el uso de RAW y PACKET sockets (cap_net_raw)

Lista de capabilities

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).
$ man capabilities

Enlaces externos

http://manpages.ubuntu.com/manpages/intrepid/man7/capabilities.7.html
http://penta.debconf.org/dc12_schedule/attachments/208_capabilities_EN.odp
http://www.esdebian.org/articulos/24052/asegurando-linux-las-linux-capabilities
https://wiki.archlinux.org/index.php/Using_File_Capabilities_Instead_Of_Setuid


--Yago 15:05 13 sep 2012 (UTC)