¿Registrar cada invocación de cada programa SUID?

12

Me gustaría tener un archivo de registro que contenga una entrada por cada vez que un usuario ejecute un programa suid, que contenga el nombre de usuario, el programa y los argumentos de la línea de comandos que se le pasen. ¿Hay una forma estándar de lograr esto en Linux?

Kim
fuente

Respuestas:

7

Puede registrar todas las invocaciones de un ejecutable específico (setuid o no) a través del subsistema de auditoría . La documentación es bastante escasa; Comience con la página de manual de auditctl , o tal vez este tutorial . Las distribuciones más recientes envían un auditdpaquete. Instálalo y asegúrate de que el auditddemonio se esté ejecutando, luego

auditctl -A exit,always -F path=/path/to/executable -S execve

y observe cómo se inician las llamadas /var/log/audit/audit.log(o donde su distribución haya configurado esto).

Gilles 'SO- deja de ser malvado'
fuente
1
Supongo que uno podría escribir un script para obtener primero todos los binarios SUID con find y luego usar su solución para cada uno. No elegante, pero ciertamente factible. ¡Gracias!
Kim
2
@ Kim: Creo que puede registrar todas las invocaciones de un binario raíz setuid por un usuario no root reemplazando -F path=…con -F euid=0 -F 'uid!=0'o algo similar. No puedo ver un gancho en el código setxid invocado porexecve ni un reloj setxid específico en el subsistema de auditoría . O, por supuesto, puede registrar todos execvey cada proceso posterior.
Gilles 'SO- deja de ser malvado'
Interesante. Nunca he oído hablar de esto antes. Me pregunto qué tan ampliamente utilizado es. Debian popcon no tiene una entrada para auditd.
Faheem Mitha
findcomando para enumerar todos los archivos SUID:find / -xdev \( -perm -4000 \) -type f -print
1
@FaheemMitha Tiene una entrada popcon: qa.debian.org/popcon-graph.php?packages=auditd
jofel