Panorama general
A la hora de auditar, experimentar y restringir con precisión quirúrgica los privilegios de un proceso en Linux, el envoltorio de shell capsh (Capability Shell Wrapper) se posiciona como un recurso fundamental. En este tutorial técnico orientado a Ubuntu, analizaremos desde el despliegue del binario hasta la inspección del entorno de permisos, la interpretación de máscaras hexadecimales del kernel, la supresión selectiva de facultades administrativas y la ejecución confinada bajo identidades sin privilegios.
Instalación de libcap2-bin e inspección de privilegios actuales (–print)
Para disponer del binario capsh en distribuciones basadas en Debian o Ubuntu, es necesario aprovisionar la suite de herramientas provista por el paquete libcap2-bin.

Al ejecutar capsh --print, el sistema expone una radiografía exhaustiva de los conjuntos de capacidades asignados a la sesión de shell activa (Effective, Permitted, Bounding, entre otros), acompañada de las credenciales de usuario (UID, GID) y el estado de las banderas de seguridad (Securebits).
Esta vista consolidada permite a los administradores dimensionar al instante el margen de maniobra real que posee el entorno frente a los recursos del sistema operativo.
⚙️ [Opciones clave de capsh]
--print : Despliega la configuración actual de capacidades del proceso, identidades de usuario/grupo y flags de seguridad.--drop : Elimina irrevocablemente del bounding set los privilegios seleccionados.--caps : Asigna una lista explícita de capacidades al proceso que se va a generar.--user : Efectúa la transición de contexto hacia las credenciales de la cuenta de usuario indicada.--inh : Configura las capacidades marcadas como heredables (Inheritable) hacia procesos derivados.--addamb : Incorpora privilegios al conjunto ambiente (Ambient) para transmitirlos a ejecutables sin bits especiales.--secbits : Modifica las banderas de bits seguros (Securebits) para blindar la política de escalado o retención de privilegios.--chroot : Confina la raíz del sistema de archivos al directorio especificado mediante chroot.

Validación de soporte en el kernel y decodificación de máscaras (–supports, –decode)
El parámetro capsh --supports=cap_net_raw permite verificar si el kernel de Linux en ejecución reconoce e implementa formalmente la capacidad de red cruda cap_net_raw.
Cuando la característica cuenta con soporte íntegro en el núcleo, la utilidad finaliza de forma transparente con un código de retorno exitoso (0), sin emitir texto en pantalla.

De manera idéntica, la instrucción capsh --supports=cap_sys_admin evalúa la disponibilidad de la potestad cap_sys_admin, responsable de la gran mayoría de operaciones troncales de administración.
Dado que la ausencia de errores garantiza la compatibilidad del kernel, este mecanismo resulta óptimo para implementar validaciones condicionales dentro de scripts de automatización antes de disparar tareas críticas.

Por su parte, el comando capsh --decode=0x000001ffffffffff procesa los valores en formato de máscara de bits hexadecimal —típicamente extraídos de pseudoficheros como /proc/[PID]/status— y los traduce a nombres de capacidades legibles para humanos.
A través de esta conversión se revela con total nitidez el compendio de facultades activas en el proceso, evidenciando privilegios tales como cap_chown, cap_sys_admin o cap_bpf.

Reducción de superficie de ataque: purga del bounding set (–drop)
Al ejecutar capsh --drop=cap_chown,cap_setuid --print, se eliminan de manera definitiva del conjunto limitante (Bounding set) los privilegios cap_chown y cap_setuid, imprimiendo de inmediato la nueva estructura de seguridad.
Tanto en la sección Bounding set como en el registro Current IAB se observa la desestimación explícita de ambas capacidades, materializando en la práctica el principio de menor privilegio sobre el proceso en ejecución.

Para comprobar el aislamiento en subprocesos, la instrucción capsh --drop=cap_chown -- -c "capsh --print | grep 'Bounding set'" instancia una subshell confinada tras revocar cap_chown e inspecciona directamente su conjunto límite.
La salida filtrada ratifica que el proceso hijo hereda de forma estricta la restricción impuesta, impidiendo cualquier reactivación posterior de la capacidad excluida.

Transición a cuentas sin privilegios y ajuste fino de capacidades (–user, –caps)
Mediante la instrucción capsh --user=nobody --print, la sesión conmuta su contexto de ejecución hacia el usuario no privilegiado nobody, exponiendo los nuevos identificadores numéricos y el mapa de capacidades resultante.
La traza evidencia la migración exitosa a UID y GID nobody (65534), reflejando la configuración básica y despojada que adquiere un proceso estándar al operar bajo esta identidad de servicio.

Llevando el control un paso más allá, el comando capsh --user=nobody --caps="cap_net_bind_service+ep cap_setpcap-ep" --print degrada la sesión al usuario nobody pero inyecta de forma selectiva la capacidad cap_net_bind_service en los conjuntos Efectivo (Effective) y Permitido (Permitted).
La presencia de cap_net_bind_service=ep dentro del apartado Current demuestra que es viable dotar a un demonio no privilegiado de la facultad exclusiva de enlazar puertos de red privilegiados, sin necesidad de exponer el sistema a los riesgos inherentes de una ejecución con privilegios de root completos.

A lo largo de este laboratorio práctico hemos comprobado la versatilidad de capsh en Ubuntu para auditar, limitar y configurar perfiles de capacidades a medida.
Reemplazar la omnipotencia de superusuario por una concesión granular de facultades constituye una de las mejores prácticas para robustecer y blindar cualquier infraestructura Linux moderna.