capabilities – ¿Cómo configurar las capacidades con el comando setcap?

Pregunta:

Me gustaría configurar wpa_supplicant y openvpn para que se ejecuten como usuario no root, como la configuración recomendada para Wireshark . No puedo encontrar ninguna documentación sobre lo que significa +eip en este ejemplo:

sudo setcap cap_net_raw,cap_net_admin,cap_dac_override+eip /usr/bin/dumpcap

Respuesta:

La forma en que funcionan las capacidades en Linux está documentada en las man 7 capabilities .

Las capacidades de los procesos en el conjunto efectivo son contra las cuales se realizan las verificaciones de permisos . Las capacidades de archivo se utilizan durante una llamada de execv (que ocurre cuando desea ejecutar otro programa 1 ) para calcular los nuevos conjuntos de capacidades para el proceso.

Los archivos tienen dos conjuntos de capacidades, permitidas y heredables y bit efectivas .

Los procesos tienen tres conjuntos de capacidades: efectivos , permitidos y heredables . También hay un conjunto de límites, que limita qué capacidades se pueden agregar más adelante al conjunto heredado de un proceso y afecta cómo se calculan las capacidades durante una llamada a execv . Las capacidades solo se pueden quitar del conjunto delimitador , no agregarlas.

Las comprobaciones de permisos para un proceso se comparan con el conjunto efectivo del proceso. Un proceso puede aumentar sus capacidades del conjunto permitido al efectivo (usando capget y capset syscalls, las API recomendadas son respectivamente cap_get_proc y cap_set_proc ).

Los conjuntos de límites y heredados y las capacidades de archivo entran en juego durante una llamada al sistema execv. Durante la ejecución , se calculan los nuevos conjuntos efectivos y permitidos y los conjuntos heredados y delimitadores permanecen sin cambios. El algoritmo se describe en la página del manual de capabilities :

P'(permitted) = (P(inheritable) & F(inheritable)) | (F(permitted) & cap_bset) P'(effective) = F(effective) ? P'(permitted) : 0 P'(inheritable) = P(inheritable) [ie, unchanged]

Donde P es el conjunto de capacidades antiguo, P ' es el conjunto de capacidades después de execv y F es el conjunto de capacidades de archivo.

Si una capacidad en conjunto es heredable ambos procesos, fije heredables del archivo (intersección / AND lógico), que se añade al conjunto permitido. Se agrega el conjunto permitido del archivo (unión / OR lógico) (si está dentro del conjunto delimitador).

Si se establece el bit efectivo en las capacidades de archivo, todas las capacidades permitidas se elevan a efectivas después de execv .

Las capacidades en el kernel están configuradas para subprocesos, pero con respecto a las capacidades de los archivos, esta distinción suele ser relevante solo si el proceso altera sus propias capacidades.

En su ejemplo, las capacidades cap_net_raw , cap_net_admin y cap_dac_override se agregan a los conjuntos heredados y permitidos y se establece el bit efectivo . Cuando se ejecuta su binario, el proceso tendrá esas capacidades en los conjuntos efectivos y permitidos si no están limitados por un conjunto delimitador.

[1] Para la llamada al sistema fork , todas las capacidades y el conjunto delimitador se copian del proceso padre. Los cambios en uid también tienen su propia semántica sobre cómo se establecen las capacidades en los conjuntos efectivos y permitidos .

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım