Interceptar chamadas do sistema GNU / Linux

0

Contexto

Estou tentando projetar uma ferramenta que geraria mais ou menos automaticamente um Makefile de um script de shell padrão.

A ideia seria que para cada comando executado pelo script: eu registrasse os arquivos que são lidos e gravados, em seguida, gerasse as dependências associadas em um Makefile junto com o comando associado. Eu não quero limitar o escopo de tal comando, eles poderiam ser: uma chamada de compilador em uma linguagem esotérica, um conjunto de testes, um sistema de empacotamento, etc ...

Na prática, o Makefile é apenas um cache para a ferramenta. Ele fornece uma sugestão de comandos que podem ser executados em paralelo. A primeira execução assumirá uma dependência sequencial completa e observará quais arquivos serão lidos / gravados por esse comando. As execuções a seguir executam apenas comandos que precisam ser executados novamente, com um mecanismo à la make. A sutileza é que, se um comando estiver tentando ler um arquivo que ainda não está atualizado (nova dependência), a chamada interceptada será interrompida até que o arquivo seja atualizado.

Problema

Eu preciso interceptar, em tempo real, o acesso aos arquivos para detectar quais arquivos são acessados por qual comando.

Eu considerei usar LD_PRELOAD , mas isso pressupõe que todos os comandos usem libc chamadas para realizar chamadas do sistema. E considerei implementar meu próprio módulo do kernel para capturar essas chamadas do sistema, mas, então, minha ferramenta exigirá permissões indevidas.

Eu vejo duas soluções:

  • execute os comandos no modo de depuração
  • execute os comandos em um ambiente virtual usando os recursos de virtualização do SO

O modo de depuração me forneceria controle suficiente para interceptar essas chamadas? Por exemplo, seria empilhado com um comando que já executou um subprocesso no modo de depuração?

> Se não, quanto trabalho envolveria o uso de recursos de virtualização do processador? Ou seja, o sistema operacional virtualizado é basicamente transparente (exceto pelo comportamento de paralisação), precisarei implementar muito de chamadas de sistema não relacionadas?

Suposições

Estou interessado apenas em arquivos acessados por comandos de espaço do usuário, se um programa é executado em modo privilegiado, não espero poder "espioná-lo". Assumirei que um arquivo é produzido / atualizado por exatamente um comando ou é uma semente.

    
por Nonyme 15.09.2016 / 18:08

0 respostas