GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo administrar las capacidades de archivos de Linux

Tradicionalmente, un proceso de Linux es privilegiado (ejecutándose como root) o sin privilegios. Los procesos privilegiados no están sujetos a verificaciones de permisos del kernel y, por lo tanto, tienen pleno poder sobre un sistema. Una capacidad es un privilegio distinto e independiente que un proceso puede utilizar para eludir determinadas comprobaciones de permisos. Las capacidades se introdujeron por primera vez en Linux 2.2 y se agregaron varias más en versiones posteriores. Por lo general, se establecen en archivos ejecutables y se otorgan automáticamente al proceso cuando se ejecuta un archivo con una capacidad. Las capacidades esencialmente dividen el poder del usuario root en privilegios separados, lo que mejora la seguridad al limitar el acceso que un atacante obtendría al explotar o abusar de un servicio.

Esta guía presentará algunas capacidades de uso común y demostrará cómo se pueden ver y modificar.

Capacidades comunes

El kernel de Linux implementa una multitud de capacidades. Algunos de ellos son:

  • CAP_SYS_ADMIN:Permite una amplia gama de operaciones. Esta capacidad debe evitarse en favor de capacidades más específicas.
  • CAP_CHOWN:realiza cambios en el ID de usuario y el ID de grupo de los archivos 
  • CAP_DAC_READ_SEARCH:omite la lectura de archivos y las comprobaciones de lectura/ejecución de directorios. Un programa con esta capacidad se puede usar para leer cualquier archivo en el sistema.
  • CAP_DAC_OVERRIDE:anula DAC (control de acceso discrecional), es decir, omite las verificaciones de permiso de lectura/escritura/ejecución. Esta capacidad otorga a un ejecutable la capacidad de acceder y modificar cualquier archivo en el sistema de archivos.
  • CAP_NET_BIND_SERVICE:permite la vinculación a números de puerto inferiores a 1024.
  • CAP_KILL:Omita las verificaciones de permisos para enviar señales a procesos como SIGHUP y SIGKILL.
  • CAP_SYS_NICE:Modificar el valor de amabilidad y la prioridad de programación de los procesos, entre otros.
  • CAP_SYS_RESOURCE:permite anular varios límites en los recursos del sistema, como cuotas de disco, límites de tiempo de CPU, etc.

La lista completa está disponible en la página del manual de capacidades(7).

A los archivos se les pueden asignar capacidades en 3 conjuntos diferentes:permitido, heredable y efectivo. Los subprocesos tienen 2 conjuntos adicionales:ambiente y delimitación. Cada conjunto puede contener cero o más capacidades, con la excepción del conjunto efectivo para archivos, que en realidad es un solo bit. Estos conjuntos definen comportamientos complejos del núcleo que están más allá del alcance de esta guía. Al asignar capacidades a los archivos, utilizaremos los conjuntos permitidos y efectivos en la mayoría de los casos.

NOTA:SELinux puede interferir con las capacidades. En sistemas con SELinux en modo de aplicación, puede evitar que los procesos aprovechen sus capacidades.

Herramientas requeridas

Existen dos paquetes diferentes para la gestión de capacidades:libcap y libcap-ng. Este último está diseñado para ser más fácil que el primero. Ambos están cubiertos en esta guía.

libcap proporciona getcap y setcap para ver y configurar capacidades de archivos, mientras que libcap-ng consolida ambas funciones en una sola herramienta, filecap.

libcap

Instalación

En Debian, Ubuntu y otras distribuciones basadas en Debian, las utilidades libcap se pueden instalar con:

apt update
apt install libcap2-bin

Para instalar en CentOS, use el siguiente comando:

yum install libcap

Para instalar en Fedora, use el siguiente comando:

dnf install libcap

Para instalar en Arch, use el siguiente comando:

pacman -Sy libcap

Uso

getcap simplemente muestra las capacidades asignadas a un archivo, si las hay. Utilice la siguiente sintaxis:

getcap /path/to/binary

Por ejemplo:

Getcap también puede buscar recursivamente con el indicador -r. Por ejemplo:

NOTA:2>/dev/null se usa para evitar saturar la salida con errores de "Operación no admitida", que ocurren cuando getcap intenta obtener las capacidades de los archivos en /sys, /proc, etc. Estos sistemas de archivos virtuales especiales no admiten capacidades.

Para establecer capacidades de archivo con setcap, use la siguiente sintaxis:

setcap CAP+set filename

Por ejemplo, para agregar CAP_CHOWN y CAP_DAC_OVERRIDE a los conjuntos permitidos y efectivos, use:

setcap CAP_CHOWN,CAP_DAC_OVERRIDE+ep file1

Para eliminar capacidades de un archivo, use el indicador -r:

setcap -r filename

Aquí hay algunos ejemplos adicionales:

libcap-ng

Instalación

Para instalar en Debian, Ubuntu y otras distribuciones basadas en Debian:

apt update
apt install libcap-ng-utils

Para instalar en CentOS:

yum install libcap-ng-utils

Para instalar en Fedora:

dnf install libcap-ng-utils

Para instalar en Arch:

pacman -Sy libcap-ng

Uso

  • El programa filecap hace referencia a capacidades sin el prefijo "CAP_" (por ejemplo, NET_ADMIN en lugar de CAP_NET_ADMIN).
  • filecap no funciona con rutas relativas, espera la ruta completa al pasar archivos o directorios como argumentos.
  • filecap no le permite especificar conjuntos de capacidades, siempre usa permitido y efectivo al establecer capacidades.

Para ver las capacidades asignadas a un archivo:

filecap /full/path/to/file

Para buscar un directorio recursivamente, use:

filecap /full/path/to/dir

Para buscar en todo el sistema de archivos con filecap, use uno de los siguientes comandos:

filecap /
filecap -a

Estos son algunos ejemplos del uso de filecap para examinar archivos y directorios:

Para establecer una capacidad en un archivo, use la sintaxis:

filecap /full/path/to/file cap_name

Por ejemplo:

filecap /usr/bin/tac dac_override

Para eliminar capacidades, use esta sintaxis:

filecap /full/path/to/file none

Aquí hay algunos ejemplos de configuración y eliminación de capacidades usando filecap:

Conclusión

Las capacidades son una característica poderosa del kernel con amplias aplicaciones de seguridad. Deben sustituirse por privilegios completos y SUID raíz siempre que sea posible.


Linux
  1. Cómo administrar la contraseña de la cuenta en Linux

  2. Cómo crear un archivo de intercambio en Linux

  3. Cómo vaciar un archivo de registro en Linux

  4. ¿Cómo cambiar el nombre de un archivo en Linux?

  5. Cómo administrar una partición de intercambio en Linux

Cómo cambiar el nombre de un archivo (s) en Linux

Cómo administrar el sistema de archivos de Linux en Ubuntu Server

Cómo vincular un archivo en Linux

Cómo cifrar archivos en Linux

Cómo deshabilitar el intercambio en Linux

¿Cómo usar gzip en Linux?