Otro método, con el que me encontré hace un tiempo en esta publicación de blog de Brendan Gregg, es usar el rastreador de capacidades - capaz .
A continuación se muestra un resultado de muestra:
$ sudo /usr/share/bcc/tools/capable
TIME UID PID COMM CAP NAME AUDIT
11:31:54 0 2467 capable 21 CAP_SYS_ADMIN 1
11:31:54 0 2467 capable 21 CAP_SYS_ADMIN 1
11:31:59 1000 2468 ls 1 CAP_DAC_OVERRIDE 1
11:31:59 1000 2468 ls 2 CAP_DAC_READ_SEARCH 1
11:32:02 0 1421 timesync 25 CAP_SYS_TIME 1
11:32:05 1000 2469 sudo 7 CAP_SETUID 1
11:32:05 0 2469 sudo 6 CAP_SETGID 1
Tiene la ventaja significativa de registrar las comprobaciones de capacidad realizadas por el núcleo para un proceso determinado. Esto permite perfilar la aplicación frente a las capacidades que realmente requiere, p. para reducir los privilegios y ejecutarlo como un usuario sin privilegios.
Mientras pscap permite listar los efectivos capacidades de todos los procesos en ejecución, no ofrece un método confiable para verificar qué capacidades son realmente requeridas por el proceso, porque:
- Un proceso puede tener la capacidad X en su conjunto permitido y solo elevarlo al conjunto efectivo durante un breve período de tiempo para realizar una operación privilegiada.
- Un proceso podría haber comenzado con un conjunto más amplio de capacidades, hacer la inicialización que requiere privilegios elevados y descartar algunas (o todas) capacidades (por ejemplo, hacer ping para abrir un socket sin formato).
- Solo funciona para procesos que ya se ejecutan de manera basada en capacidades. ¿Qué pasaría si tuviera que determinar el conjunto de capacidades mínimo requerido para su aplicación recién desarrollada?
- No permite correlacionar las comprobaciones de privilegios realizadas para la aplicación con las operaciones que realiza, con capaz obtienes marcas de tiempo para cada verificación individual.
Las fuentes para capable están disponibles en github. Instrucciones de instalación para BCC (incluyendo capable ) están disponibles aquí. Para una descripción más detallada, consulte la publicación del blog mencionada al principio, también tenga en cuenta que la capacidad requiere kernel 4.4+, una alternativa para kernels más antiguos también está disponible en la publicación del blog.
Nota:no soy el autor ni estoy afiliado a los desarrolladores de la herramienta de ninguna manera. Solo quería llevarlo a una audiencia más amplia, ya que personalmente lo he usado para desarrollar un perfil de capacidades para una aplicación de monitoreo compleja que anteriormente requería privilegios de root completos para ejecutarse, y encontré que este rastreador es de gran ayuda.
Resulta que es más fácil de lo esperado. Instale libcap-ng (https://people.redhat.com/sgrubb/libcap-ng/) y use pscap
.
En Ubuntu 16.04, se puede instalar con:
sudo apt-get install libcap-ng-utils
Extracto de salida de muestra:
ppid pid name command capabilities
1 468 root systemd-journal chown, dac_override, dac_read_search, fowner, setgid, setuid, sys_ptrace, sys_admin, audit_control, mac_override, syslog, audit_read
1 480 root lvmetad full
1 492 root systemd-udevd full
1 1040 root rpc.idmapd full
1 1062 root rpc.gssd full
1 1184 messagebus dbus-daemon audit_write +
1 1209 root NetworkManager dac_override, kill, setgid, setuid, net_bind_service, net_admin, net_raw, sys_module, sys_chroot, audit_write
Basado en la actualización reciente de libcap2
1:(opción corta):getpcaps
Descripción:
Desde aquí:
getpcaps muestra las capacidades de los procesos indicados por los valores pid dados en la línea de comando.
Ejemplo:
$ getpcaps <PID>
PID: = cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap+i
2:(Opción un poco más larga):/proc status y capsh
Descripción:
proc es un pseudo-sistema de archivos de información de procesos o, en otras palabras, un directorio donde puede ver información sobre todos los procesos.
Acerca de capsh:
El soporte y el uso de la capacidad de Linux se pueden explorar y restringir con esta herramienta. Esta herramienta proporciona un contenedor práctico para ciertos tipos de pruebas de capacidad y creación de entornos.
También proporciona algunas funciones de depuración útiles para resumir el estado de la capacidad.
Ejemplo:
$ cat /proc/<PID>/status | grep Cap
Y obtendrá (en la mayoría de los sistemas):
CapInh: 00000000a80425fb (Inherited capabilities)
CapPrm: 0000000000000000 (Permitted capabilities)
CapEff: 0000000000000000 (Effective capabilities)
CapBnd: 00000000a80425fb (Bounding set)
CapAmb: 000000000000000 (Ambient capabilities set)
Usa el capsh
utilidad para decodificar números hexadecimales en el nombre de capacidades:
capsh --decode=00000000a80425fb
0x00000000a80425fb=cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap
(*) Puedes descargar capsh
con:sudo apt-get install git libpcap-dev
.