Cómo rastrear sudo
$ sudo strace -u <username> sudo -k <command>
sudo
ejecutastrace
como root.strace
ejecutasudo
como<username>
pasado a través del-u
opción.sudo
elimina las credenciales almacenadas en caché delsudo
anterior con-k
opción (para volver a pedir la contraseña) y ejecuta<command>
.
El segundo sudo
es el tracee (el proceso que se está rastreando).
Para poner automáticamente al usuario actual en el lugar de <username>
, usa $(id -u -n)
.
Por qué sudo no funciona con strace
Además de esta respuesta de Charles, esto es lo que execve()
la página del manual dice:
Si el bit set-user-ID se establece en el archivo de programa al que hace referencia el nombre de ruta, entonces el ID de usuario efectivo del proceso de llamada se cambia por el del propietario del archivo de programa. De manera similar, cuando se establece el bit set-group-ID del archivo de programa, el ID de grupo efectivo del proceso de llamada se establece en el grupo del archivo de programa.
Las transformaciones mencionadas anteriormente de los ID efectivos no se realizan (es decir, se ignoran los bits set-user-ID y set-group-ID) si se cumple alguna de las siguientes condiciones:
- el atributo no_new_privs está establecido para el subproceso de llamada (ver prctl(2));
- el sistema de archivos subyacente está montado nosuid (el indicador MS_NOSUID para mount(2)); o
- se está rastreando el proceso de llamada.
Las capacidades del archivo de programa (ver capacidades(7)) también se ignoran si alguna de las anteriores es verdadera.
Los permisos para rastrear un proceso, inspeccionar o modificar su memoria, se describen en la subsección Comprobación del modo de acceso de Ptrace en la sección NOTAS de la página de manual de ptrace(2). He comentado sobre esto en esta respuesta.
Por razones de seguridad, el bit setuid y el ptrace (usados para ejecutar archivos binarios bajo un depurador) no se pueden respetar al mismo tiempo. El incumplimiento de esta restricción en el pasado condujo a CVE-2001-1384.
En consecuencia, cualquier sistema operativo diseñado pensando en la seguridad dejará de respetar ptrace en la ejecución de un binario setuid o no respetará el bit setuid cuando ptrace esté en uso.
En Linux, considere usar Sysdig en su lugar, que, al poder solo ver pero no modificar el comportamiento, no corre los mismos riesgos.