Red de conocimiento informático - Aprendizaje de programación - Interceptación LINUX de comandos de shell

Interceptación LINUX de comandos de shell

Cuando el shell recibe un comando no interno (como ls, find), no envía el comando al kernel. Este concepto es incorrecto. El shell debe bifurcar un proceso que llama a las llamadas al sistema exec* (como execlp, etc.) para cargar programas ejecutables como ls y find, mientras que el proceso del shell espera a que el proceso hijo complete la llamada al sistema de espera.

Como se mencionó anteriormente, puede interceptar dentro de la serie de llamadas ejecutivas. exec se implementa en glibc, por lo que simplemente descarga el código fuente de glibc (o libc en su sistema) y agrega su código de interceptación a la llamada exec. Compile el glibc modificado y reemplácelo con el glibc de su sistema.

Además, cabe destacar que además del shell, otros programas también pueden utilizar fork exec para ejecutar determinados comandos. Si no desea interceptar esta situación, debe determinar el proceso principal o ancestro del proceso actual para determinar si es un proceso de shell en el momento de la interceptación.

Por último, glibc es realmente importante, es la base de todos los programas, así que ten cuidado al cambiarlo.

Esta es la base de todos los programas.