Você pode rastrear as chamadas do sistema com strace
, mas há, de fato, uma inevitável penalidade de velocidade. Você precisa executar strace
como root se o comando for executado com privilégios elevados:
sudo strace -f -o foo.trace su user -c 'mycommand'
Outro método que provavelmente será mais rápido é pré-carregar uma biblioteca que contorne as funções de acesso ao sistema de arquivos: LD_PRELOAD=/path/to/libmywrapper.so mycommand
. A variável de ambiente LD_PRELOAD
não será transmitida para programas invocados com privilégios elevados. Você teria que escrever o código dessa biblioteca wrapper ( aqui está um exemplo de "Construindo biblioteca interposers para diversão e lucro ”); Não sei se há código reutilizável disponível na Web.
Se você estiver monitorando os arquivos em uma hierarquia de diretórios específica, será possível visualizar o sistema de arquivos com LoggedFS que todos os acessos através dessa visão são registrados.
loggedfs -c my-loggedfs.xml /logged-view
mycommand /logged-view/somedir
Para configurar o LoggedFS, inicie com a configuração de amostra fornecida com o programa e leia Sintaxe do arquivo de configuração do LoggedFS .
Outra possibilidade é o subsistema de auditoria do Linux. Certifique-se de que o daemon auditd
foi iniciado e configure o que você deseja registrar com auditctl
. Cada operação registrada é registrada em /var/log/audit/audit.log
(em distribuições típicas). Para começar a assistir a um arquivo específico:
auditctl -a exit,always -w /path/to/file
Se você colocar um relógio em um diretório, os arquivos nele e seus subdiretórios serão também assistidos de forma recursiva. Tome cuidado para não observar o diretório que contém os logs de auditoria. Você pode restringir o registro a determinados processos, consulte a página auditctl
man para os filtros disponíveis. Você precisa ser root para usar o sistema de auditoria.