Usando Linux, me gustaría rastrear los ejecutables que se ejecutan en mi nombre, incluida la línea de comando completa (en la práctica, cada exec * () hecho como mi propio usuario). Se supone que un programa que no controlo, para manejar una tarea, ejecuta el programa que paso, pero quiero asegurarme de que lo haga, y qué opciones usa. El programa que no controlo es astuto y parece cambiar el comportamiento dependiendo del nombre del programa que se supone que debe ejecutar para la tarea, por lo que no puedo pasar un script de shell que registre la información e invoque lo real programa.
¿Es posible que me informen de todos los exec * () s realizados como mi usuario en el sistema en Linux, incluida la línea de comandos completa? A falta de correr ps
en un bucle, eso es. Prefiero hacerlo directamente en el sistema en el que trabajo y no requerir acceso de root, pero si es necesario, puedo generar un sistema en el que tengo acceso de root, instalar los programas e investigar allí.
Usando Ubuntu 12.4 LTS.
fuente
audit
da, pero una 'línea de comando completa' en el shell también podría afectar el proceso secundario al usar la configuración de redirección / canalización y envvar, así como contener sustituciones / expansiones, citas no significativas y espaciado, y estructuras de control comodoa && dob
, y no las obtendrás.Respuestas:
Necesita configurar
auditd
para grabarexecve
eventos. Ejemplo en RHEL5:Ignoro la advertencia de arco y no parece importar, pero puede usarla
-F arch=b64
o-F arch=b32
configurarla si lo desea.El resultado de lo anterior es:
Eso es obviamente rápido y sucio, pero eso es lo básico de cómo lo haces. Lo que necesita hacer exactamente probablemente depende en gran medida de lo que está tratando de hacer exactamente. Puede reducir el flujo de auditoría utilizando varios filtros en el
auditctl
comando, pero no conozco esa información, así que no sé qué incluir. Si necesita algo más específico, le sugiero que consulte la página de manual o publique un comentario a esta respuesta y la actualizaré un poco más.Espero que eso te empuje en la dirección correcta.
EDITAR:
Como su pregunta implica mirar a un usuario en particular, puedo mostrarle que:
Idéntico a lo anterior, pero solo será registrado
execve
por alguien que se ejecute con la identificación de usuario efectiva16777216
. Si necesita especificar elloginuid
valor del usuario (con quién iniciaron sesión inicialmente en el sistema), entonces filtre porauid
:Los filtros AUID / loginuid serían útiles, por ejemplo, si el usuario va a hacer un root
su
o unsudo
root. En esa situación, habrá muchas cosas ejecutándose como root, pero solo le preocupan las cosas que el usuario en cuestión inició.auditctl
también le permite apilar filtros para que pueda filtrar por amboseuid
yauid
:fuente
Has preguntado algo simple. He hecho un ejemplo con,
mplayer
pero supongo que se puede adaptar a otras situaciones:Como puede ver, esto es muy simple: analiza el primer argumento, ya que es un archivo, se crea un registro en el archivo central
$LOG
y se concatena en un archivo (que siempre tienen el mismo nombremplayer.log
en el mismo directorio.Por lo tanto, el usuario puede obtener la última película que ha leído en cada directorio.
fuente